ここではじゃんけんで勝者が一人み決まるまでの平均回数を求めるプログラムを作ります。
ソースコード
import java.io.*;
import java.util.Random;
public class janken {
public static void main(String[] args) throws IOException {
BufferedReader br =new BufferedReader(new InputStreamReader(System.in));
int player=0;
for (;;) {
try {
System.out.println("何人でじゃんけんするのか入力してください");
player=Integer.parseInt(br.readLine());
if (player==0) {
System.out.println("0以外の数を入力してください");
}else if (player!=0) break;
}catch (NumberFormatException e) {
System.out.println("数字のみ入力してください");
}
}double sum=0;
for (int i=0;i<1000000;i++) {
int num=判定(player);
sum+=num;
}System.out.println("勝者が一人に決まるまでの平均回数は"+sum/1000000+"回です");
}
private static int 判定(int player) {
Random r=new Random();
for (int j=1;;j++) {
int rock=0,scissors=0,paper=0,te=0;
for (int i=0;i<player;i++) {
te=r.nextInt(3);
if (te==0) {
rock++;
}else if (te==1) {
scissors++;
}else if (te==2) {
paper++;
}
}
if (player>=3) {
if (rock!=0&&scissors!=0&&paper!=0);
else if (rock==player||scissors==player||paper==player);
else if (rock==0) player=scissors;
else if (scissors==0) player=paper;
else if (paper==0) player=rock;
}else if (player==2) {
if (rock==player||scissors==player||paper==player);
else return j;
}if (player==1) return j;
}
}
}
スポンサーリンク
実行結果
何人でじゃんけんするのか入力してください
5
勝者が一人に決まるまでの平均回数は4.484939回です
簡単に解説
まず何人でじゃんけんするのかを入力させます。
次に判定メソッドで人数文分乱数を生成します。
この乱数が0だったら「グー」、1だったら「チョキ」、2だったら「パー」という様に分け、
あいこになるのか勝敗が決まり人数が減るのか判定します。
この判定であいこの場合はまた同じ作業を繰り返します。人数が減った場合は人数を減らす処理をして同じ作業を繰り返します。
これで人数が一人になった時の回数をmainメソッドに返します。これを繰り返し、
最後に勝者が一人に決まるまでの回数の合計を繰り返した回数で割ることで平均値を求めています。
スポンサーリンク