黑马程序员技术交流社区
标题:
题9
[打印本页]
作者:
pz_xiaoxie
时间:
2015-9-16 00:02
标题:
题9
有100个人围成一个圈,从1开始报数,报到14的这个人就要退出。然后其他人重新开始,从1报数,到14退出。问:最后剩下的是100人中的第几人?
作者:
fmi110
时间:
2015-9-16 10:24
/*
* 练习:有100个人围成一个圈,从1开始报数,报到14的这个人就要退出。
* 然后其他人重新开始,从1报数,到14退出。问:最后剩下的是100人中的第几人?
*
* 分析:1 100个人标记为1的说明没被点到
* 2 开始数圈,count进行1-14循环,遇到num[i]不是0,count++ ,当count==14时,数到的人num[i]置0
* 3 flag记录置0的次数,flag==99时 说明只剩一个人,输出角标
*/
public class Temp {
public static void main(String[] args) {
int[] num = new int[100];//记录100个人
for(int i = 0;i < 100;i++){
num[i] = 1; //给每个人置1
}
int count = 1,flag = 0,pos = 0;
//循环叔叔,循环次数不清所以用while
while(flag<99){
while(num[pos] == 0){
if(pos == 99)
pos = 0;
else
pos++;
}//跳过出局的人
if(count==14){ //刚好数一圈
count = 1;
flag++;
System.out.println("第"+(pos+1)+"号出局...\t"+flag);
num[pos] = 0;
if(pos == 99)
pos = 0;
else
pos++;
}else{
count++;
if(pos == 99)
pos = 0;
else
pos++;
}
}
System.out.println("done");
for(int i = 0;i < 100;i++)
if(num[i]!=0)
System.out.println(i);
}
}
复制代码
作者:
fmi110
时间:
2015-9-16 10:34
运行结果
第14号出局... 1
第28号出局... 2
第42号出局... 3
第56号出局... 4
第70号出局... 5
第84号出局... 6
第98号出局... 7
第12号出局... 8
第27号出局... 9
第43号出局... 10
第58号出局... 11
第73号出局... 12
第88号出局... 13
。。。。。。。。。。。
第16号出局... 88
第36号出局... 89
第55号出局... 90
第80号出局... 91
第39号出局... 92
第91号出局... 93
第90号出局... 94
第29号出局... 95
第75号出局... 96
第47号出局... 97
第74号出局... 98
第72号出局... 99
done
91
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2