#include<stdio.h>
#define LEN 1000
int the_max(int a[],int max,int N){
int i;
for(i=N-1;i>-1;i--){
if(a[i]==0){
max=a[i-1];
} else{break;}
}
return max;
}
int main(){
int a[LEN]={0},*p=a;
int N,M; //N 总人数 M 第M个退出
int i,call,out=0,max,last; //call 报数 out 退出人数 max剩下的人里序号最大的 last最后留下的人的号
printf("请输入人数、第几个人退出");
scanf("%d%d",&N,&M);
for(i=0;i<N;i++){
a[i]=i+1; //给每个人标号
}
i=0;
call=0;
max=N;
while(1){
if(a[i]!=0){ //判断它有没有退出
call++; //报数
call=call% M;
if(call==0){ //判断是否报到M
out++;
a[i]=0;
max=the_max(a,max,N); // 判断最大值是否改变
}
if(out==(N-1)){last=a[max-1];break;} //判断是否剩一个人
i++;
if(i>=max) i=0; //判断是否到队伍末尾
}else{i++;}
}
printf("最后留下的人原来排在%d号",last);
}