A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© pz_xiaoxie 中级黑马   /  2015-9-16 00:02  /  609 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

有100个人围成一个圈,从1开始报数,报到14的这个人就要退出。然后其他人重新开始,从1报数,到14退出。问:最后剩下的是100人中的第几人?

2 个回复

倒序浏览

  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. }
复制代码


回复 使用道具 举报
运行结果
  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
复制代码
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马