笔记:思路
#include<stdio.h>
int main()
{
int n, k, m, i, j;
int cnt1, cnt2=1;
//cnt1表示还在圈内的人数 ,cnt2表示报数的人数
int a[100];
scanf ("%d%d%d", &n, &k, &m);
cnt1=n;
for ( i=0; i<n; i++ ) {
a[i]=1; //1表示还在圈内
}
while ( cnt1>1 ) {
//从队中存在的人开始
if ( a[k]==1 ) {
while ( cnt2<m ) {
k=(k+1)%n;
//存在的人才计数
if ( a[k]==1 ) {
cnt2++;
}
}
a[k]=0;
cnt1--;
do {
k=(k+1)%n;
} while ( a[k]==0 ) ;
//此时k为下一个开始的人
cnt2=1;
}
}
for ( i=0; i<n; i++ ) {
if ( a[i]==1 ) {
printf ("%d\n", i);
}
}
return 0;
}

京公网安备 11010502036488号