小孩玩游戏,手拉手围成一个圈,然后数数.每次数到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开始数 数到k的人出去 接着从1开始数 数到k出去 最后出来的人是谁 c语言程序设计教程(第二版)谭浩强 经典例题 对于学习c语言有很大帮助
有10个小孩围成一圈并依次编号,教师指定从第2个小孩开始报数,报到第3个小孩即令其出列。然后从下一个孩子继续报数,数到第3个小孩又令其出列,如此直到所有的孩子都出列。求小孩出列的先后顺序。
500人围成一个圈 数到3的人下个人就从1开始数 最后一个人的位置在那里 //小孩玩游戏,手拉手围成一个圈,然后数数.每次数到3的时候这个小孩退出,下一个从1开始再数. //试问,如果有500个小孩,最后剩下的小孩是原来的...
有100个人围成一个圈,从1开始报数,报到14的这个人就要退出,上传的资源位源码,运行测试没问题后上传
用队列求解:100个人围成一圈,从第一个人开始报数,报3的被杀掉,下一个人接着从1开始报。如此反复,最后剩下一个,求最后的胜利者。
在问题描述中,n个人围成一个圈,每个人都有一个唯一的编号1到n,并且有一个报数上限m。从第一个人开始顺时针报数,报到m的人出列,然后从下一个人继续报数,新的m值变为出列者的密码。这个过程一直持续到所有人都...
约瑟夫问题的基本描述如下:N个人围成一个圈,从第一个人开始顺时针报数,每数到M(M小于N)的那个人将被排除,然后从被排除人的下一个位置继续报数,直到所有人全部出列。问题的目标是找出所有人的出列顺序。 解决...
约瑟夫问题的基本描述是:N个人围成一个圈,从第一个人开始顺时针方向依次报数,报到M的人将被淘汰(被杀掉),然后从下一个人继续报数,直至只剩下一个为止。题目给出的例子中,N=6,M=5,所以当每个人报数到5时,...
在C++编程中,"N个人围成一圈,依次数1和2,输出数2的人"是一个经典的算法问题,通常称为“约瑟夫环”(Josephus Problem)。该问题源于一个古老的犹太人的故事,涉及在困境中选择幸存者的方式。在本问题中,我们...
编号为1到20的二十个人围成一圈,从编号为K的人开始从1报数,报到M的人出列,求出列的编号顺序,这是用链表实现的小程序,可以不止20个人,任意人数也行
N个小孩围成一圈,给他们从1开始依次编号,现指定从第W个开始报数,报到第S个时,该小孩出列,然后从下一个小孩开始报数,仍是报到第S个出列,如此重复下去,直到所有的小孩都出列(总人数不足S个时将循环报数)。
接着仍沿顺时针方向从被淘汰出局者的下一人员又 重新从 1 开始数起,数到 k 后,淘汰第 2 个人;如此继续,直到最后剩下一个人时停止。请输出 最后所剩那一个人的编号,并输出淘汰过程的某种“中间结果数据”。
十个小孩围成一圈分糖果,老师分给第一个小孩10块,第二个小孩2块,第三个小孩8块,第四个小孩22块,第五个小孩16块,第六个小孩4块,第七个小孩10块,第八个小孩6块,第九个小孩14块,第十个小孩20块。然后所有的...
这个问题要求我们模拟一个游戏,其中n个人围成一个圈,从第一个人开始按照1到m的顺序报数,每报到m的人就退出圈子,直到只剩一个人为止。我们要找出最后留在圈子里的人原来的编号。 在Python中,我们可以使用列表来...
一群孩子围成一圈进行数字游戏,第一个孩子数一,第二个数2,第三个数一,数一的孩子淘汰,最后的胜利者是谁呢???可以通过简单地编程来实现。
N个人围成一圈,从第一个人开始按顺序报数并编号1,2,3,……N,然后开始从第一个人转圈报数,凡是报到3的退出圈子。则剩下的最后一个人编号是多少。 定义一个类,然后在类前定义一个结构体 2、在类中定义一个链表...
在这个问题中,m个小孩围坐一圈,从第一个小孩开始按顺时针方向依次数数,数到n的小孩会被淘汰出圈,然后下一个小孩继续从1开始数,直到所有小孩都出局。我们需要找出所有小孩出局的顺序。 首先,让我们讨论一下...
N个人围圈数数的Java算法,比较有规律性的算法
# 题目: # 有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。
多人围成一圈,连续报1、2、3,报3的人删去,剩下的人继续,直至剩一个人。