package MonteCarlo; import java.util.Scanner; /** * */ /** * @author Administrator * */ public class MonteCarlo{ /** * @param args */ MonteCarlo(){ } public static void coinFlipping(int l, int m, int n, double p){ double totalFlips = 0; for(int instance = 1; instance <= 1000000; instance ++){ //simulate the process 1 million time int flips = 0; int man[] = new int[4]; man[1] = l; man[2] = m; man[3] = n; while (man[1] > 0 && man[2] > 0 && man[3] > 0){ //toss until one man is ruined int []flip = new int[4]; //toss for(int i = 1; i <=3; i++){ if (Math.random() < p) flip[i] = 1; else flip[i] = 0; }//for double sum = flip[1] + flip[2] + flip[3]; if(sum == 1 || sum == 2){ //someone wins if(sum == 1){ for(int i = 1; i <=3; i++){ if(flip[i] == 0)flip[i] = -1; else flip[i] = 2; } }//fi else{ for(int i = 1; i <=3; i++){ if(flip[i] == 0)flip[i] = 2; else flip[i] = -1; } }//else for(int i = 1; i <=3; i++){ man[i] += flip[i]; } }//fi flips++; }//while totalFlips += flips; }//for System.out.println("Coin Flipping Game, number of tosses: " + totalFlips / 1000000); } public static void missingSenators(){ Scanner input = new Scanner(System.in); System.out.println("Input A: "); int A = input.nextInt(); System.out.println("Input M: "); int M = input.nextInt(); double defeats = 0; for(int instance = 1; instance <= 1000000; instance ++){//simulate the experiment process 1 million times int votes[] = new int [101]; for(int i = 1; i <= A; i++)votes[i] = -1; //A senators vote against the bill for(int i = A + 1; i <= 100; i++)votes[i] = 1; //100-A senators vote for the bill for(int i = 1; i <= M; i++){ //M senators are absent int go = 1; while(go == 1){//randomly choose one senator to be absent int j = (int) Math.floor(Math.random() * 100) + 1; //[1,100] if(votes[j] != 0){ //j can be set as absent votes[j] = 0; //mark her as absent go = 0; } }//while }//for int sum = 0; for(int i = 1; i <= 100; i++) sum += votes[i]; if(sum <0) defeats ++; //defeat }//for System.out.println("Missing Senators, probability of being defeated: " + defeats / 1000000); } public static void waitingBuses(){ Scanner input = new Scanner(System.in); System.out.println("Input number of bus lines: "); int n = input.nextInt(); double totalWaitingTime = 0; for(int instance = 1; instance <= 1000000; instance ++){//simulate the experiment process 1 million times double [] busArrivals = new double [n+1]; busArrivals[1] = 0; //bus line 1 arrival for(int j = 2; j <= n; j++)busArrivals[j] = Math.random();//bus line 2 to n arrival double visitorArrival = Math.random(); //visitor arrival java.util.Arrays.sort(busArrivals); //sort in ascending order double waitingtime = 0; if(visitorArrival > busArrivals[n]) waitingtime = 1 - visitorArrival; //visitor arrives after bus line n else{ int j = 2; while(j <= n){ if(visitorArrival < busArrivals[j]){//visitor arrives between bus j-1 and bus j waitingtime = busArrivals[j] - visitorArrival; break; //jump out of the while loop } j ++; }//while }//else totalWaitingTime += waitingtime; } System.out.println("Average waiting time: " + totalWaitingTime / 1000000); } public static void main(String[] args) { // TODO Auto-generated method stub //MonteCarlo.coinFlipping(1,1,1,0.5); //missingSenators(); waitingBuses(); } }