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

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

  1. public static void main(String []args){
  2. //定义一个数组用来当做500个人.并且初始化为true表示都在圈内
  3. boolean arr[] =new boolean[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. }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值