Quantcast
Channel: 円周率近似値の日に生まれて理系じゃないわけないだろ! - knifeのblog
Viewing all articles
Browse latest Browse all 5376

数え上げは大変 -数学編-

$
0
0

午後のひとときに、数え上げ問題を解いてみよう。

問題
n×nの領域の格子点に釘を打つ。
3つの釘に輪ゴムを掛けて、三角形を作るとする。

数学問題
3×3、4×4、5×5のそれぞれの領域において、三角形は何通り作れるでしょうか。

プログラミング問題
n×nの領域において、三角形は何通り作れるでしょうか。
nは1以上で出来るだけ大きなnについてまで求められる高速なプログラムを考えよ。


シンキングタ~イム


まずは数学編です。


このような数え上げ問題、
重要なのは、漏れなく、ダブリなく、出来る限り簡単に数えること。

3×3と言わず、2×2から考えていきましょう。

格子点を、
0 1
2 3

としましょうか。
三角形は、
012
013
023
123
の4通り作れます。

同様に
0 1 2
3 4 5
6 7 8

として、三角形は、
013 014 015 016 017 018 
023 024 025 026 027 028 
034 035 037 038 
045 046 047 
056 057 058 
067 068 
078 
123 124 125 126 127 128 
134 135 136 137 138 
145 146 148 
156 157 158 
167 168 
178 
234 235 236 237 238 
245 247 248 
256 257 
267 268 
278 
346 347 348 
356 367 358 
367 368 
378 
456 457 458 
467 468 
478 
567 568 
578 
の76通りでした。
ただ、このような数え方では、そろそろ限界かと思います。
 

三角形に出来ないケースを考えると、3点が一直線上に並んだ場合ということが解ります。
つまり、全事象から余事象を取り除くほうが楽ではなかろうかということです。

全事象は、3×3の9点から、異なる3点を選ぶので、
(3^2)C3=9C3=(9・8・7)/(3・2・1)=84
で84通り。
余事象は、3点が一直線上に並んだ場合なので、
012
345
678
036
147
258
048
246
の8通り。
84-8=76
76通り。

こちらのほうが先の方法よりも楽に求まりましたね。

4×4は、
0 1 2 3
4 5 6 7
8 9 A B
C D E F


全事象は、
(4^2)C3=16C3=(16・15・14)/(3・2・1)=560
で560通り。
余事象は、
→方向を+x、←方向を-x、↓方向を+yとして、傾きで考える。
xの取りうる値は、-1、0、1
yの取りうる値は、0、1
組み合わせは、3×2=6あるが、2点目は1点目より後ろ、3点目は2点目より後ろとすると、
(x, y)={ (-1, 1), (0, 1), (1, 0), (1, 1) }
の4通りを考えれば良い。
(x, y)=(-1, 1)の場合、
258 369 36C 39C 69C 7AD 
の6通り。
(x, y)=(1, 1)の場合、
同様に6通り。
(x, y)=(0, 1)の場合、
048 04C 08C 159 15D 19D 26A 26E 2AE 37B 37F 3BF 48C 59D 6AE 7BF 
の16通り。
(x, y)=(1, 0)の場合、
同様に16通り。
と余事象は44通り。
560-44=516
516通り。

5×5は、
0 1 2 3 4
5 6 7 8 9
A B C D E
F G H I J
K L M N O


全事象は、
(5^2)C3=25C3=(25・24・23)/(3・2・1)=2300
余事象は、
(x, y)={ (-2, 1), (-1, 1), (-1, 2), (0, 1), (1, 0), (1, 1), (1, 2), (2, 1) }
の8通りを考えれば良く、
(x, y)=(-2, 1)の場合、
47A 9CF EHK
の3通り。
(x, y)=(-1, 2)の場合、
(x, y)=(1, 2)の場合、
(x, y)=(2, 1)の場合、
同様に3通り。
(x, y)=(-1, 1)の場合、
26A 37B 37F 3BF 48C 48G 48K 4CG 4CK 4GK 7BF 8CG 8CK 8GK 9DH 9DL 9HL CGK DHL EIM
の20通り。
(x, y)=(1, 1)の場合、
同様に20通り。
(x, y)=(0, 1)の場合、
1列目は、
05A 05F 05K 0AF 0AK 0FK 5AF 5AK 5FK AFK
で5倍して、
の50通り。
(x, y)=(1, 0)の場合、
同様に50通り。
余事象は、112通り。
2300-152=2148
2148通り。

3×3は76通り
4×4は516通り
5×5は2148通り
と、数え上げはどんどん面倒になっていく。

漸化式でもあれば良いのだろうが、なかなか難しいようです。

というわけで、手計算でやるのは面倒なので、プログラミングの出番ですね。

明日はプログラミング編ですね。


ではでは
 

 


Viewing all articles
Browse latest Browse all 5376

Trending Articles