2011年3月3日木曜日

京大の入試を解いてみました

入試問題を投稿した予備校生は逮捕されたようです。

入試で不正をしても、入学後はどうするつもりだったのでしょう。勉強について行けないですよね。

私たちの、学生に対する考えも同じです。「就職試験に合格し、内定をもらえば終わり」ではありません。入社後に自分の足で立ち、自分の力で稼いでいけるかが大事だと思っています。会社に入ってからが勝負、その勝負に耐え、勝ち進んでいけるような基礎を、私たちが学生の皆さんに伝えていかなければと思っています。

さて、Yahoo知恵袋ですが、次の問題の回答は間違っていると思います。

<問題>
箱の中に、1から9までの番号を1つずつ書いた9枚のカードが入っている。ただし異なるカードには異なる番号が書かれているものとする。 この箱から2枚のカードを同時に選び、小さいほうの数をXとする。これらのカードを箱に戻して、再び2枚のカードを同時に選び、小さいほうの数をYとする。
X=Yである確率を求めよ。

<私の回答>
異なる9枚のカードから同時に2枚を選ぶ組合せは、9C2=9×8÷2=36通り。
1回目の行為で、X=1になる組合せは、1と2~1と9までの8通り。つまり、X=1になる確率は8/36。
同様に、2回目の行為で、Y=1になる確率も、8/36。
つまり、X=Y=1になる確率は、(8/36)×(8/36)=(64/36/36)。

次に、X=Y=2になる確率は、(7/36)×(7/36)=(49/36/36)。
← X=2、Y=2になる組合せは、2と3~2と9までの7通り。

X=Y=3になるのは、(6/36)×(6/36)=(36/36/36)。

ということで、X=Yである確率は、
(64+49+36+25+16+9+4+1)/36/36=204/1296=17/108=約0.1574

<検証>
これだけでは、正当性が主張できないので、Javaでシミュレーションしてみました。
プログラムは、次の通りです。

import java.lang.*;

public class simu {
 public static void main(String[] args) {
  int num1, num2, x, y;
  int count = 0, loop = 1000000;
  double result;
  for (int i=0;i<loop;i++){
   num1 = (int)(Math.random() * 9) + 1;
   num2 = (int)(Math.random() * 9) + 1;
   if ( num1 == num2 ) {
    i--;
    continue;
   }
   if ( num1 < num2 ) {
    x = num1;
   } else {
    x = num2;
   }

   num1 = (int)(Math.random() * 9) + 1;
   num2 = (int)(Math.random() * 9) + 1;
   if ( num1 == num2 ) {
    i--;
    continue;
   }
   if ( num1 < num2 ) {
    y = num1;
   } else {
    y = num2;
   }

   if ( x == y ) {
    count++;
   }
  }
  result = (double)count/loop;
  System.out.println("result = " + result );
 }
}
/*
result = 0.157584
result = 0.157797
result = 0.157175
result = 0.157242
result = 0.157525
result = 0.156938
result = 0.156959
result = 0.157113
*/

100万回の計算を8回繰り返した値を見ると、0.157までは真値として信用して良さそうです。

Yahoo知恵袋の回答の方は2/9=0.22222ですので、シミレーションの結果とは異なっています。

<教訓>
ネット上の情報なんて、こんなものです。信用し過ぎないことです。
自分の頭で考えることをしないと、応用が利かなくなりますよね。結果だけでなく、自分の頭や体を使うことも大切にしましょう。

最後まで読んでいただいて、感謝です。

                 (General記)

0 件のコメント:

コメントを投稿