面试题:
设有N个人依次围成一圈,从第1个人开始报数,第M个人出列,然后从出列的下一个人开始报数,数到第M个人又出列,...,如此反复到所有的人全部出列为止,设N个人的编号分别为1,2,...,N,打印出出列的顺序,要求用java实现。
参考代码:
package com;
/*
* 编程题:设有N个人依次围成一圈,从第1个人开始报数,第M个人出列,然后从出列的下一个人开始报数,数到第M个人又出列,...,
* 如此反复到所有的人全部出列为止,设N个人的编号分别为1,2,...,N,打印出出列的顺序,要求用java实现。
*/
public class demo {
public static void main(String args[]){
int n=99;//人数,1...99编号
int m=9;//循环次数
int oCount=0;//统计总出列人数
int index=1;//指示当前报数的编号
int iCount=0;//统计每一轮循环报数的个数
int[] icol=new int[99];
for(int i=0;i<99;i++) icol[i]=0;//初始化为未出列
long start=System.currentTimeMillis();
while (true){
if(oCount==n-1) { //剩下最后一个,直接出列
System.out.println("最后,第"+String.valueOf(index)+"个出列!");
break;//全部出列,结束循环
}
if(icol[index-1]==0) iCount++;//未出列,报数
if(iCount == m ) { //本轮报数循环结束
System.out.println("第"+String.valueOf(index)+"个出列!");
icol[index-1]=1;//标记为已出列
oCount++;//已处理人数加1
iCount =0;//从头开始数每轮循环报数
}
index++;//下一个
if(index==n) index=1;//返回队头
}
long end =System.currentTimeMillis();
System.out.println("总出列个数:"+String.valueOf(oCount+1));
System.out.println("总时长:"+String.valueOf(end-start));
}
}
执行结果:
第9个出列!
第18个出列!
第27个出列!
第36个出列!
第45个出列!
第54个出列!
第63个出列!
第72个出列!
第81个出列!
第90个出列!
第1个出列!
第11个出列!
第21个出列!
第31个出列!
第41个出列!
第51个出列!
第61个出列!
第71个出列!
第82个出列!
第92个出列!
第4个出列!
第15个出列!
第26个出列!
第38个出列!
第49个出列!
第60个出列!
第73个出列!
第84个出列!
第95个出列!
第8个出列!
第22个出列!
第34个出列!
第47个出列!
第59个出列!
第74个出列!
第86个出列!
第98个出列!
第14个出列!
第29个出列!
第43个出列!
第57个出列!
第70个出列!
第87个出列!
第3个出列!
第19个出列!
第35个出列!
第52个出列!
第67个出列!
第83个出列!
第2个出列!
第20个出列!
第39个出列!
第56个出列!
第76个出列!
第93个出列!
第13个出列!
第33个出列!
第55个出列!
第77个出列!
第96个出列!
第23个出列!
第44个出列!
第66个出列!
第89个出列!
第16个出列!
第42个出列!
第68个出列!
第94个出列!
第25个出列!
第53个出列!
第80个出列!
第12个出列!
第48个出列!
第79个出列!
第17个出列!
第58个出列!
第91个出列!
第32个出列!
第75个出列!
第24个出列!
第65个出列!
第10个出列!
第69个出列!
第30个出列!
第88个出列!
第50个出列!
第28个出列!
第5个出列!
第85个出列!
第78个出列!
第97个出列!
第7个出列!
第46个出列!
第37个出列!
第40个出列!
第6个出列!
第62个出列!
第64个出列!
最后,第65个出列!
总出列个数:99
总时长:7