500个人手拉手,数3退1,求最后一个人原来在那个位置

来源:互联网 发布:腾讯 数据 移动 打脸 编辑:程序博客网 时间:2024/05/22 01:50

题目是:有500个人手拉着手,从第一个开始数,1,2,3,数到第三个的时候将第三个去掉,然后继续从第四个开始数1,2,3,又将第三个去掉,继续反反复复的数下去直到还有一个人。

  1. public staticvoid main(String []args){
  2. //定义一个数组用来当做500个人.并且初始化为true表示都在圈内
  3. boolean arr[] =newboolean[500];
  4. for(int i=0; i<arr.length; i++){
  5. arr[i]=true;
  6. }
  7. //定义一个总人数
  8. int count=arr.length;
  9. //定义一个索引位置,表示当前在那个位置
  10. int index=0;
  11. //计数器,数到3退出
  12. int countNum=0;
  13. //如果只剩下最后一个人就退出循环
  14. int jj=1;
  15. while(count>1){
  16. System.out.print(count+" ");
  17. if(arr[index]==true){//如果当前的这个人在圈内就开始数数
  18. countNum++;
  19. if(countNum==3){
  20. jj++;
  21. System.out.print("第"+jj+"圈");
  22. countNum=0;// 如果数到3了就要把计数器归0
  23. arr[index]=false; //表示这个人已经退出
  24. count--; //总人数减去一个
  25. }
  26. }
  27. index++;
  28. if(index==arr.length){
  29. index=0;
  30. }
  31. }
  32. //找到最后一个在圈子内的人的下标位置
  33. for(int i=0 ;i<arr.length; i++){
  34. if(arr[i]==true){
  35. System.out.println("最后剩下的一个人在第"+(i+1)+"个位置");
  36. }
  37. }
  38. }

 

原创粉丝点击