黑马程序员技术交流社区

标题: 题9 [打印本页]

作者: pz_xiaoxie    时间: 2015-9-16 00:02
标题: 题9
有100个人围成一个圈,从1开始报数,报到14的这个人就要退出。然后其他人重新开始,从1报数,到14退出。问:最后剩下的是100人中的第几人?

作者: fmi110    时间: 2015-9-16 10:24

  1. /*
  2. * 练习:有100个人围成一个圈,从1开始报数,报到14的这个人就要退出。
  3. * 然后其他人重新开始,从1报数,到14退出。问:最后剩下的是100人中的第几人?
  4. *
  5. * 分析:1 100个人标记为1的说明没被点到
  6. *                  2 开始数圈,count进行1-14循环,遇到num[i]不是0,count++ ,当count==14时,数到的人num[i]置0
  7. *                  3 flag记录置0的次数,flag==99时 说明只剩一个人,输出角标
  8. */
  9. public class Temp {
  10.         public static void main(String[] args) {
  11.                 int[] num = new int[100];//记录100个人
  12.                 for(int i = 0;i < 100;i++){
  13.                         num[i] = 1;  //给每个人置1
  14.                 }
  15.                 int count = 1,flag = 0,pos = 0;
  16.                 //循环叔叔,循环次数不清所以用while
  17.                 while(flag<99){
  18.                         while(num[pos] == 0){
  19.                                 if(pos == 99)
  20.                                         pos = 0;
  21.                                 else
  22.                                         pos++;
  23.                         }//跳过出局的人
  24.                         if(count==14){  //刚好数一圈
  25.                                 count = 1;
  26.                                 flag++;
  27.                                 System.out.println("第"+(pos+1)+"号出局...\t"+flag);
  28.                                 num[pos] = 0;
  29.                                 if(pos == 99)
  30.                                         pos = 0;
  31.                                 else
  32.                                         pos++;
  33.                         }else{
  34.                                 count++;
  35.                                 if(pos == 99)
  36.                                         pos = 0;
  37.                                 else
  38.                                         pos++;
  39.                         }
  40.                 }
  41.                 System.out.println("done");
  42.                 for(int i = 0;i < 100;i++)
  43.                         if(num[i]!=0)
  44.                                 System.out.println(i);
  45.         }
  46. }
复制代码



作者: fmi110    时间: 2015-9-16 10:34
运行结果
  1. 第14号出局...        1
  2. 第28号出局...        2
  3. 第42号出局...        3
  4. 第56号出局...        4
  5. 第70号出局...        5
  6. 第84号出局...        6
  7. 第98号出局...        7
  8. 第12号出局...        8
  9. 第27号出局...        9
  10. 第43号出局...        10
  11. 第58号出局...        11
  12. 第73号出局...        12
  13. 第88号出局...        13
  14. 。。。。。。。。。。。
  15. 第16号出局...        88
  16. 第36号出局...        89
  17. 第55号出局...        90
  18. 第80号出局...        91
  19. 第39号出局...        92
  20. 第91号出局...        93
  21. 第90号出局...        94
  22. 第29号出局...        95
  23. 第75号出局...        96
  24. 第47号出局...        97
  25. 第74号出局...        98
  26. 第72号出局...        99
  27. done
  28. 91
复制代码





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2