题目:
已知n个人围坐在一张圆桌周围,从编号为start的人开始报数,数到k的那个人出列;他的下一个人又从1开始报数,数到k的那个人又出列;依此规律重复下去,直到圆桌只剩下一个人。
思路:
- 用数组a表示这n个人,对应的下标为0~n-1,用0表示未出列,1表示已出列
- 用count记录数到的数,当数到k时此人的对应位置置为1,表示已出列
- start记录每次开始报数的位置,因为n-1的下一个位置是0,所以start = (start+1)%10
- 最后当只剩下一个人时,输出值为0的人
实现:
import java.util.Scanner;
public class JosephRing {
public static void main(String[] argstart) {
// TODO Auto-generated method stub
Scanner reader = new Scanner(System.in);
int k = reader.nextInt(); //间隔
int n = reader.nextInt(); //人数
int start = reader.nextInt(); //开始位置
start = start%n; //保证n落在人数范围内
int count =0; //每数一次,count+1
int a[] = new int [n];
while(n > 1) //只剩一个人时退出循环
{
if(a[start]==0)
{
count++;
if(count%k==0) //数到k时这个人出列,位置标记为1,总人数-1
{
a[start]=1;
n--;
}
}
start = (start+1)%10; //如数到10时对应位置应是a[0]
}
for(int i=0;i<10;i++)
{
if(a[i]==0) //最后剩下的人a[]=0
{
System.out.println(i);
break;
}
}
}
}