有n个人围成一圈,顺序排号(1,2….,n)。从编号为k的人开始报数,凡报到m的人退出圈子,他的下一个人又从1开始报数,数到m的人又退出,直到所有的人都退出。设计算法求出最后出圈那个人的序号。
import java.util.*;
public class Paidui {
public static void main(String[] args) {
Scanner input=new Scanner(System.in);
int n,k,m,temp=0,temp2=0;
int BU_YUE_JIE = 0;
System.out.println("请输入n,k,m:");
n=input.nextInt();
k=input.nextInt();
m=input.nextInt();
while(k>n){
System.out.println("输入有误,k不能大于n!");
System.out.println("请输入n,k,m:");
n=input.nextInt();
k=input.nextInt();
m=input.nextInt();
}
int[] a=new int[n];
for(int i=0;i<n;i++)
a[i]=1;
while(temp2!=n-1)
{
while(temp<m)
{
BU_YUE_JIE=k+temp2;
while(BU_YUE_JIE>n-1)
BU_YUE_JIE=BU_YUE_JIE-n;
//System.out.println("BU_YUE_JIE="+BU_YUE_JIE);
if(a[BU_YUE_JIE]==1)
{
temp++;
temp2++;
}
else
temp2++;
}
a[BU_YUE_JIE]=0;
/*for(int i=0;i<n;i++)
System.out.print(a[i]+" ");*/
if(temp2!=n-1)
{
temp2=1;
temp=1;
k=k+1;
while(k>n-1)
k=k-n;
//System.out.println("k1="+k);
while(a[k]==0)
{
k=k+1;
while(k>n-1)
k=k-n;
//System.out.println("k2="+k);
}
}
}
System.out.println("最后退出的人的编号为:"+(BU_YUE_JIE+1));
input.close();
}
}