中易网

出圈问题:出圈,n个围成一圈,数到第m个人出圈,再从m个人的下一个人数,依次循环

答案:3  悬赏:20  
解决时间 2021-02-07 21:54
出圈问题:出圈,n个围成一圈,数到第m个人出圈,再从m个人的下一个人数,依次循环
最佳答案
public class Ysf{
public static void main(String[] args){
int n=10,m=2;
int outNum=0;
int tmp=m;
int index=0;
boolean countOne=false;
int a[]=new int[n];
for(int i=0;i<a.length;i++)
{a[i]=i+1;}

while(outNum<n){//出圈的人数小于总人数
tmp=m;
while(tmp>0){//还没数到m
countOne=false;
while(!countOne){//数一个有效的人
if(a[index]!=-1){//如果这个人没有出圈,则这个计数有效,否则跳过这个人,直到数到下一个有效的人。
countOne=true;
}
index+=1;
if(index>n-1)
index=index-n;
}
tmp--;
}
index-=1;//因为数到有效的人后,index仍然自增了,所以要-1,确定出圈的人。
if(index<0)
index=n-1;
System.out.println(""+a[index]);
outNum++;
a[index]=-1;//表示这个人已经出圈了

}
}
}
全部回答
package test; import java.util.Vector; public class Ysf { static int n = 5, m = 2; // n=总人数,m=第M人 public static void main(String[] args) { int step = m; int[] a = new int[n]; for (int i = 0; i < a.length; i++) { a[i] = i + 1; } personOutPrint(step, a); } private static void personOutPrint(int stepCount, int[] a) { if (stepCount < a.length) {// 判断是否绕完一圈 if (a[stepCount - 1] <= n) {// 判断该数字没有被退出 System.out.println("第" + a[stepCount - 1] + "个人退出!"); a[stepCount - 1] += n;// 标示该号人员已经退出 stepCount += m; personOutPrint(stepCount, a); }else { stepCount++; personOutPrint(stepCount, a); } } else { // 打印圈中剩余人的号码,退出递归 for (int i = 0; i < a.length; i++) { if (a[i] <= n) { System.out.println("第" + a[i] + "最后留在圈中!"); } } } } } 这样用递归的算法变量比较少,较易于理解
const m=16; var a:array[1..m] of integer; n,s,i,j:integer; begin {初始准备} for i:=1 to m do a[i]:=1; read(n); writeln('n=',n); j:=0; {输出m个出圈人编号} for i:=1 to m do begin {计数清0} s:=0; {计数为n时结束} while s&lt;n do begin {处理下标} if j&lt;m then j:=j+1 else j:=1 ; {计数} s:=s+a[j] end; {输出出圈人编号} write(j:3); {该元素清0} a[j]:=0 end end. ____________________________________________ program ___; const m=8; var begin readln(n); fillchar(a,sizeof(a),true); i:=1; s:=1; b:=m; repeat if i&gt;m then i:=i mod m; if a[i] then begin if s mod n=0 then begin a[i]:=false; writeln(i:2); b:=b-1 end; s:=s+1; end; i:=i+1; until b=0; readln; end.
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
新界机电地址在哪,我要去那里办事
她老公回来她不在联系我,电话都删了?我怎么
百年龙袍在什么地方啊,我要过去处理事情
谁知道抖音黄梦的发型怎么剪谢谢
宽带从强电管穿出来可以吗
仁恒金沙府我想知道这个在什么地方
高企申报中新产品或新技术证明查新材料办理?
And A地址在什么地方,想过去办事
孔子所创立的儒家思想和儒家文化,不仅塑造了
开了淘宝店,还能卖二手的东西吗,有影响吗
才氏涮吧金马店地址在哪,我要去那里办事
奔驰e级amg2004款 e 55 amg 新车多少钱
请问Li-ion 18650充电池用尽了,怎么样才能充
柴行口音像店地址有知道的么?有点事想过去
红苹果家具定制价格怎么样
推荐资讯
丰田汉兰达的安全系数咋样
我是宁波的 这周六想在宁波市内的景点玩一天
我用的笔记本连接的wifi,用steam下游戏,宽
刚加的内存条组成双通道用重新安装系统吗
青草为人类环境默默付出的句子
鲍鱼煮出屎是什么东西
涧凹地址有知道的么?有点事想过去
当管不办事明明是我的房子他说是人家的怎么办
原来这里还藏着汗水500字
男主角叫Noah,女主角叫Allie一部英文电影。
唐家埭在什么地方啊,我要过去处理事情
云浮市云城区西村佳兴食品商店在什么地方啊,
手机登qq时,显示手机磁盘不足,清理后重新登
刺客的套装怎么选啊?