- /*
- * 练习:有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);
- }
- }
复制代码
|