作者在 2010-05-26 17:13:24 发布以下内容
某企业为了促销,搞抽奖宣传活动,奖品为新款手机一部,抽奖规则如下:
(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分)
public class Jiang {
static int num = 0;
static double su = 0;
public static void main(String[] args) {
int n = Integer.parseInt(args[0]), m = Integer.parseInt(args[1]);//盒子的个数,和每次要数的数
double k = Math.random() * 30;
int k1 = (int) k;//将手机放在这里
System.out.println("手机发在" + k1 + "箱中");
List<Integer> list = new ArrayList<Integer>();
for (int i = 0; i < n; i++) {
list.add(i);
}
loop: while (true) {
for (int i = 0; i < list.size(); i++) {
num++;
if (num == m) {
su++;
num = 0;
int woe = (int) list.get(i) + 1;
if (woe == (list.get(list.size() - 1) + 1)) {
woe = 0;
}
System.out.println(woe + "箱被抽到");
if (woe == k1) {
System.out.println("恭喜您中奖了");
System.out.println("中奖的概率是" + (su / n) * 100 + "%");
break loop;
} else if (woe == 0) {
System.out.println("很遗憾你没有中奖");
break loop;
}
}
}
}
}
}
static int num = 0;
static double su = 0;
public static void main(String[] args) {
int n = Integer.parseInt(args[0]), m = Integer.parseInt(args[1]);//盒子的个数,和每次要数的数
double k = Math.random() * 30;
int k1 = (int) k;//将手机放在这里
System.out.println("手机发在" + k1 + "箱中");
List<Integer> list = new ArrayList<Integer>();
for (int i = 0; i < n; i++) {
list.add(i);
}
loop: while (true) {
for (int i = 0; i < list.size(); i++) {
num++;
if (num == m) {
su++;
num = 0;
int woe = (int) list.get(i) + 1;
if (woe == (list.get(list.size() - 1) + 1)) {
woe = 0;
}
System.out.println(woe + "箱被抽到");
if (woe == k1) {
System.out.println("恭喜您中奖了");
System.out.println("中奖的概率是" + (su / n) * 100 + "%");
break loop;
} else if (woe == 0) {
System.out.println("很遗憾你没有中奖");
break loop;
}
}
}
}
}
}