问题描述
有n人围成一圈,顺序排号。从第1个人开始报数(从1到3报数),凡报到3的人退出圈子;下一个人从1开始报数,报到3的人退出圈子。如此下去,直到留下最后一个人。输出最后一人的初始编号
解决方案:
#include<stdio.h>
int main()
{
int n, j = 0;
scanf("%d", &n);
int a[n];
int m = n;
for (int i = 0; i < n; i++)
{
a[i] = i + 1;
}
int i = 0;
while (m != 1) \\一直循环,直到只剩下最后一人
{
if (a[i] != 0)
{
j++;
if (j == 3)
{
j = 0;
a[i] = 0; \\报数为3的,置零
m--;
}
}
i++;
if (i == n)
i = 0;
}
for (int i = 0; i < n; i++)
{
if (a[i] != 0)
printf("%d\n", i + 1);
}
return 0;
}