题目:
有 n个人围成一圈,顺序排号。从第一个人开始报数(从 1到 3报数),凡报到 3的 人退出圈子,问最后留下的是原来第几号的那位。
思路:
题目说是排成一圈,可以看成一个数组的排列。用i从下标为1的地方开始遍历这个数组(个人习惯从下标为1处开始),每当i==n+1的时候,就给他重新设置成1,这样就实现了n个人围成一圈的效果。 再就是数组的每个元素在一开始都设置成1,表示在圈中,如果要退出圈子,就给它设成0。
代码:
#include <>
int main()
{
int a[50], i, n, count, flag=0;
scanf("%d", &n);
count=n;
for (i=1; i<=n; i++)
a[i]=1;//所有人都在圈内,为1
for (i=1; ;i++){
if (i==n+1)
i=1;//如果i超出了n个人,让他重新回到1
if (a[i]!=0) flag++;
else continue;
if (flag%3==0){
a[i]=0;
count--;
}
if (count==1)//表示只剩下一个人在圈内
break;
}
for (i=1; i<=n; i++)
if (a[i]!=0)
printf("%d", i);//注意这里是输出i,一开始写的a[i],调试了老半天
return 0;
}