解题关键点:
1.如何实现围成一圈–循环计数 == > 当循环到末尾的时候,重新置为1
2.如何控制循环结束 ==>用人数控制循环结束时机,只剩一个人的时候,退出循环
#include<stdio.h>
int main()
{
int a[1000],n,i,t,cnt=0;
scanf("%d",&n);
t=n; //用人数控制循环结束时机
for(i=1;i<=n;i++)
a[i]=i;
for(i=1;i<=n;i++)
{
if(a[i]!=0) //只计数每个退出圈子的人
cnt++;
if(cnt==3) //注意,不是 cnt%3==0
{
a[i]=0; //退出圈子的人,标记为0
cnt=0; //cnt清零,重新计数
t--; //每退出一个,总人数就减少一个
}
if(i==n)
i=0; //围成一圈---循环
if(t==1) //只剩一个人的时候,退出循环
break;
}
for(i=1;i<=n;i++)
{
if(a[i]!=0)
printf("%d ",a[i]);
}
return 0;
}
//输入:17
//输出:11
//输入:60
//输出:41