`

500人(小孩)围成一个圈,数到3的人下个人就从1开始数,问最后一个人的位置在那里?

阅读更多

小孩玩游戏,手拉手围成一个圈,然后数数.每次数到3的时候这个小孩退出,下一个从1开始再数.
试问,如果有500个小孩,最后剩下的小孩是原来的第多少个小孩.

public class Count3Quit{   
public static void main(String []args){   
   //定义一个数组用来当做500个人.并且初始化为true表示都在圈内   
   boolean arr[] =new boolean[500];   
   for(int i=0; i<arr.length; i++){   
    arr[i]=true;   
   }   
   //定义一个总人数   
   int count=arr.length;   
   //定义一个索引位置,表示当前在那个位置   
   int index=0;   
   //计数器,数到3退出   
   int countNum=0;   
   //如果只剩下最后一个人就退出循环   
  
   int jj=1;   
  
   while(count>1){   
  
  System.out.print(count+" ");   
    if(arr[index]==true){ //如果当前的这个人在圈内就开始数数   
        
     countNum++;   
       
     if(countNum==3){    
     
   jj++;   
   System.out.print("第"+jj+"圈");   
        
      countNum=0; // 如果数到3了就要把计数器归0   
        
      arr[index]=false; //表示这个人已经退出   
        
      count--; //总人数减去一个   
        
     }    
    }   
      
    index++;   
      
    if(index==arr.length){   
     index=0;   
    }        
   }   
   //找到最后一个在圈子内的人的下标位置   
   for(int i=0 ;i<arr.length; i++){   
    if(arr[i]==true){   
     System.out.println("最后剩下的一个人在第"+(i+1)+"个位置");   
    }   
   }   
}   
}  

public class Count3Quit{
public static void main(String []args){
   //定义一个数组用来当做500个人.并且初始化为true表示都在圈内
   boolean arr[] =new boolean[500];
   for(int i=0; i<arr.length; i++){
    arr[i]=true;
   }
   //定义一个总人数
   int count=arr.length;
   //定义一个索引位置,表示当前在那个位置
   int index=0;
   //计数器,数到3退出
   int countNum=0;
   //如果只剩下最后一个人就退出循环

   int jj=1;

   while(count>1){

  System.out.print(count+" ");
    if(arr[index]==true){ //如果当前的这个人在圈内就开始数数
     
     countNum++;
    
     if(countNum==3){ 
  
   jj++;
   System.out.print("第"+jj+"圈");
     
      countNum=0; // 如果数到3了就要把计数器归0
     
      arr[index]=false; //表示这个人已经退出
     
      count--; //总人数减去一个
     
     } 
    }
   
    index++;
   
    if(index==arr.length){
     index=0;
    }     
   }
   //找到最后一个在圈子内的人的下标位置
   for(int i=0 ;i<arr.length; i++){
    if(arr[i]==true){
     System.out.println("最后剩下的一个人在第"+(i+1)+"个位置");
    }
   }
}
}

 

分享到:
评论

相关推荐

    n个人围成一圈,从1开始数

    n个人围成一圈 从1开始数 数到k的人出去 接着从1开始数 数到k出去 最后出来的人是谁 c语言程序设计教程(第二版)谭浩强 经典例题 对于学习c语言有很大帮助

    java500人绕圈圈问题

    500人围成一个圈 数到3的人下个人就从1开始数 最后一个人的位置在那里 //小孩玩游戏,手拉手围成一个圈,然后数数.每次数到3的时候这个小孩退出,下一个从1开始再数. //试问,如果有500个小孩,最后剩下的小孩是原来的...

    约瑟夫问题 设有N个人围坐一圈,现从某人开始报数, 数到M的人出列,接着从出列的下一个人重新报数,数到M的人又出列,如此下去直到所有人都出列为止,试给出他们的出列次序

    约瑟夫问题的基本描述如下:N个人围成一个圈,从第一个人开始顺时针报数,每数到M(M小于N)的那个人将被排除,然后从被排除人的下一个位置继续报数,直到所有人全部出列。问题的目标是找出所有人的出列顺序。 解决...

    Josephus

    这个问题源自一个历史故事,讲述了在罗马围攻犹太城时,一群犹太人为了避难而形成一个圈,然后按照一定的规则逐个处决,直到剩下最后一个人为止。在编程领域,约瑟夫环问题通常被用来讨论循环移位、链表操作以及算法...

    (完整版)C语言编程练习题绝对经典!.doc

    * 编写程序,10个小孩围成一圈分糖果,老师顺次分给每个人的糖块数为12,2,8,22,16,4,10,6,14,20。然后按下列规则调整,所有小孩同时把自己的糖果分一半给右边的小孩,糖块数变为奇数的人,再向老师补要一块...

    Visual C++ 编写的Josephus问题.rar

    假设n个人围成一个圈,每隔k人剔除一个,我们可以从1号开始计数,每数到k就剔除该人,然后下一次从下一个人继续计数,如此反复,直到只剩一个人为止。在计算机程序中,我们可以通过创建一个表示人的链表,然后进行...

    java编程约瑟夫问题实例分析

    约瑟夫问题在计算机科学和数学中是一个古老而著名的问题,它描述了一个简单而有趣的游戏:一群人围成一圈,从某个人开始数数,数到某个数时,这个人就必须离开圈子,游戏继续进行,直到圈子中只剩下一个人。...

    php使用环形链表解决约瑟夫问题完整示例

    问题描述如下:n个人围成一个圈,从第一个人开始按顺时针方向依次报数,每数到m的倍数时,该人就会被排除出圈,然后从下一个人继续报数,直到所有人都被排除,最后剩下的那一个人就是最后的胜利者。这个问题的关键...

Global site tag (gtag.js) - Google Analytics