附加题:5、 某企业为了促销,搞抽奖宣传活动,奖品为新款手机一部,抽奖规则如下:
(1)有n个盒子摆成一圈,盒子按顺时针方向依次编号为0,1,2,……,n-1。手机随机放在其中一个盒子中。(n为自然数)
(2)从0号盒子开始摸奖,顺时针方向计数,每遇到第m个盒子就摸奖一次。(m为自然数,m<n)
(3)直到重新摸到0号盒子为止。
例如n=5,m=3,那么摸奖经过的盒子编号依次为0,3,1,4,2,0。
请编写一个完整的程序,随机输入n,m(m<n),程序分析手机有没有不被抽中的机会?如果有,概率是多少? (概率=不被抽中的可能数/n)(30分)

解决方案 »

  1.   

    import java.util.*;public class Test3{
    public static void main(String[] args) {
    System.out.println("不被摸中的概率是:"+guess(36,3));
    }
    public static double guess(int n,int m){
    boolean[] isHit=new boolean[n];
    int count=0;//不被摸中的盒子数。
    int currentBox=0;
    int times=0;
    do{
    System.out.println(currentBox);
    isHit[currentBox]=true;
    times++;
    currentBox=(m*times)%n;
    }while(currentBox!=0);
    for(boolean b:isHit){
    if(!b){
    count++;
    }
    }
    return (double)count/n;
    }

    }