メチャメチャだけど【随時更新】解答に必要な機能まとめ - ニート歴10年からの数学日記と【随時更新】計算量の減らし方まとめ - ニート歴10年からの数学日記を使って、算数オリンピックについて考察していく。
グラフや幾何学の問題や、記述に関するメタ的な問題以外の今までに無い種類の問題について考察する。
『次の表は2008年の4月のカレンダーです。カレンダーから、たて3マス、横3マスの四角形を取り出します。取り出す四角形はどの部分でもかまいませんが空白のマスがあってはいけません。
日 | 月 | 火 | 水 | 木 | 金 | 土 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
たとえば、太枠(今回は表の項目名で代用した)の部分を取り出したとします。
1 | 2 | 3 |
8 | 9 | 10 |
15 | 16 | 17 |
このとき、どの数字がどのマスに入っているかを表すときは、次の「あ」〜「け」の記号を使うものとします。
あ | い | う |
え | お | か |
き | く | け |
例えば、「あ」=1 「い」=2 のように表します。
2008年5月1日は木曜日です。次の問いは、2008年5月のカレンダーについて考えなさい。
問い1.「あ」+「お」+「け」が5の倍数になるときの「あ」の位置に入る数字をすべて求めなさい。
問い2.「い」+「え」+「お」+「か」+「く」が10の倍数になるときの「お」の位置に入る数字をすべて求めなさい。』
calendar := [
[ , , , , 1, 2, 3],
[4, 5, 6, 7, 8, 9, 10],
[11, 12, 13, 14, 15, 16, 17],
[18, 19, 20, 21, 22, 23, 24],
[25, 26, 27, 28, 29, 30, 31]
];
calendar[A][B] + calendar[A+1][B+1] + calendar[A+2][B+2] == 5 * ?;
結果におけるcalendar[A][B];
calendar[C][D] + calendar[C + 1][D] + calendar[C - 1][D] + calendar[C][D + 1] + calendar[C][D - 1] == 10 * ?;
結果におけるcalendar[C][D];
こんな感じで良いかな。
calendar[A+1][B+1]の値をXとして、X - 7 - 1 + X + X + 7 + 1 = 3*X、が5の倍数にならなければいけない。そういう値はXが5の倍数の時だけなので、「お」がカレンダーでの5・10・15・20・25・30の場合だけで、成立するのが15と20の場合だけ。その時の「あ」は7と12。
問い2は、calendar[C][D]をYとすると、同じように5*Yになって、10の倍数になるのはYが2の倍数の時だけ。成立するのは8・12・14・16・20・22の場合だけ。それらがそのまま答え。
問い1の答え方にやや工夫があったか。普通に「あ」を基準にすれば、24+3*X、が5の倍数である場合を探すになるのだけど。基準にするものを変えることで計算を簡単にした、という感じか?
『先生が大介と平太の前に次の18枚のトランプカードをならべました。
ハート:13、4、1 クローバー:13、12、10、7、6、4 ダイヤ:7、1 スペード:11、9、8、5、4、3、2
先生「わたしの好きなカードが1枚だけこの18枚の中にあるよ!そのカードのマークだけを大介に教えるよ。そしてそのカードの数字だけを平太に教えるよ。」
と言って2人にそれぞれそっと教えました。
下はそれぞれ教えられた後の2人の会話です。
大介「先生の好きなカードの数字はぼくにはわからないけど、平太も先生の好きなカードのマークはわからないはずだよ。」
平太「確かにわからないよ」
大介「あっ!それなら先生の好きな数字がわかったよ!」
さて、先生の好きなカードの数字はいくつですか。』
cards := [["heart", 13], ["heart", 4], ["heart", 1], ["clover", 13], ["clover", 12], ["clover", 10], ["clover", 7], ["clover", 6], ["clover", 4], ["diamond", 7], ["diamond", 1], ["spade", 11], ["spade", 9], ["spade", 8], ["spade", 5], ["spade", 4], ["spade", 3], ["spade", 2]];
teacher's_card := 1 := cards;
{teacher's_card[0] == A}をteacher's_card[1]が確定しないように設定; ??この行はいらない
{teacher's_card[1] == B}をteacher's_card[0]が確定しないように設定;
{teacher's_card[0] == A}をteacher's_card[1]が確定するように設定;
結果におけるteacher's_card;
答えはスペードの4。
『5人で徒競走をしました。それぞれ1〜5のいずれかのコースからスタートし、1〜5位のいずれかになりました。下のそれぞれの発言を聞いて、5人のコースと順位を答えなさい。
亮二:ぼくより数の大きいコースの人がいて、その人全員にぼくは勝ったよ!!
雄一:3コースの人が優勝したよ。
知之:ぼくよりコースと順位が両方とも小さい人はいなかったよ。コースと順位が両方とも大きかった人もいなかったよ。
秀彰:私のコースは亮二君の順位と同じ数でしたね。
竹虎:ぼくはコースと順位の数が同じだったよ。』
people := [ryozi, yuichi, tomoyuki, hideaki, taketora];
people[?][0] := 全部 : カブりなし := [1, 2, 3, 4, 5];
people[?][1] := 全部 : カブりなし := [1, 2, 3, 4, 5];
every.people[?].[?1: ?1[0] > ryozi[0]][1] > ryozi[1]; ??
people[?].[?2: ?2[0] == 3][1] == 1;
every.people[?].[?3: tomoyuki[0] > ?3[0]][1] > tomoyuki[1];
every.people[?].[?4: tomoyuki[0] < ?4[0]][1] < tomoyuki[1];
hideaki[0] == ryozi[1];
taketora[0] == taketora[0];
結果におけるpeople; ??名前を表示するのか数字を表示するのか
駄目なんだろうけど、後で一気に直す。
まず、亮二が3コースか4コースか。
もし亮二が3コースで優勝なら、秀彰が第1レーン。この時、知之は第4レーンや5レーンではあり得ない。なぜなら第3レーンで1位がいるから。つまり、第2レーン。
更にこの時、順位とレーンが同じである竹虎を4レーンと5レーンのどちらに置くかと言えば、4レーン。なぜなら5レーンで5位だと、必ず両方が知之より大きくなってしまう。知之は5位。しかしそうすると、1レーンで智之より大きな順位を取ることは不可能になってしまう。よって亮二は4コース。
亮二が4コースだとして、更に亮二の順位を考えると、2位か3位。4位は、そうすると5レーンが5位になってしまって、知之の条件が満たせなくなるから無理。同じ順位の竹虎は、同じく知之の条件で、2レーンで2位に決まる。亮二は3位、5レーンは4位。1レーンは5位。
知之は1レーンで5位。秀彰は亮二の順位から3レーン。残りの5レーンに雄一が入る。
『1〜13の数字が1つずつ書かれたカードがそれぞれ4枚ずつ、合計52枚あります。
いま、26人にこのカードを2枚ずつ配ったところ、田中君と鈴木さんのカードの和だけが等しく、他の人たちのカードの和はすべて異なっていました。
田中君の2枚のカードの和を求めなさい。』
cards := 52 : 4ずつ := [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13];
people := [A~Z];
people := 2ずつ : カブり無し := cards;
A == B;
people[?].[A以外].[?1: ?1[0] + ?1[1]].≠; ??
結果におけるA;
1~13の和の種類をまず考える。2~26、つまり25種類。peopleは26人なので、全種類使うことが分かる。
2は1+1、3は1+2、4は1+3か2+2、5は1+4か2+3、6は1+5か2+4か3+3、7は1+6か2+5か3+4、8は1+7か2+6か3+5か4+4。
14は、1+13から7+7の7通りだろう。15は2+13から7+8の6通り。16は3+13から8+8の6通り。17は4+13から8+9の5通り。18は5+13から9+9の5通り。19は6+13から9+10の4通り。20は7+13から10+10の4通り。おそらくその後は、21が3通り、22が3通り、23が2通り、24が2通り、25が1通り、26が1通り。
13は、1+12から6+7の6通り。14を頂点に、通り数が左右対称になっている。
いや違うな。2~26を足すと、(2+26)/2*(26-2+1)=350。1~13を足して4掛けると、(1+13)/2*13*4=364。人数と枚数的に全部配るから、364-350すれば、最後の一人の数字が出るはず。14。答えは14。
『AさんとBさんは、マラソン大会の練習のために公園の周りをぐるぐる走ることにしました。2人とも、うで時計を持ってきたのですが、どちらの時計もこわれかけていて、放っておくとどんどん正しい時刻から遅れていきます。
2人はある時刻に、正確な時計が置いてあるスタート地点で腕時計を合わせて、そこからたがいに逆向きに走り始めました。
2人とも、走りながらスタート地点を通るたびにうで時計を正しい時刻に合わせます。2人が2回目、3回目、4回目に出会ったとき、それぞれのうで時計は次のような時刻を指していました。(スタート時は出会ったとは数えません。また、これらの出会いはスタート地点ではない場所でした。
Aさん | Bさん | |
---|---|---|
2回目 | 12時00分 | 11時57分 |
3回目 | 12時48分 | 12時51分 |
4回目 | 13時41分 | 13時40分 |
Aさんの走る速さ、Bさんの走る速さ、Aさんのうで時計の遅れる速さ、Bさんのうで時計の遅れる速さは、たがいに異なるかもしれませんが、それぞれ一定です(途中から速くなったりしません)。
(問い1)AさんBさんがそれぞれ公園を一周する間に正しい時間から、うで時計の遅れる時間は、それぞれ何分ですか。
(問い2)2人がスタートした時刻を求めなさい。』
この問題は難しい。記述する方法も分からなかった。後から直すときに、一緒に考えることにする。
答えを見ると、まず、AとBが出会うまでの時間は一定。公園一周をAさんの速さとBさんの速さで食い尽くすまでの時間だから。そして、AさんとBさんのどちらかしかスタートを通って時計を直さない。
問題の表から、時間の経過をまとめると、Aさんが48分・53分、Bさんが54分・49分。2人の時計は正しい時間より遅れていくので、正しい時間に合わせるたびに腕時計が動いた時間は増える。2人が公園を1周する時間は常に一定なので、時計を直した時に、直さなければいけない時間も一定のはず。よって二人とも、一周した時の腕時計が遅れる時間は5分だと分かる。
2人が出会ってから再び出会うまで、2人の腕時計が動く時間は、Aさんが48分、Bさんが49分なので、腕時計が遅れる時間はAさんの方が大きい。つまり、Aさんの方が公園を一周するのが速い。1回目はどちらもスタート地点を通らないし、2回目はAさんの方が速いのでBさんはスタート地点を通らない。よって、2人がスタートしたのは、11時57分よりも49分×2だけ前の時間だと分かる。つまり、10時19分に2人がスタートしたことになる。
でもこの答え、遅れている分短いはずだと思うのだけど。いや、それにしても難しい問題だと思う。