题解:依旧采用数组的方式,使用1 2 3三个数字对N循环编号,如果是3就将其变为0,每次从第一个非0开始,记为1,进行重新编号,以此类推,当只剩下一个不为0时,即为所求结果
#include <stdio.h>
#include <math.h>
int main()
{
int n;
int s[1001] = {0};
int i;
scanf("%d", &n);
for (i = 0; i < n; i++)
{
s[i] = i + 1;
}
int count = n;
int j = 1;
while (count != 1)
{
for (i = 0; i < n; i++)
{
if (s[i] != 0)
{
s[i] = j;
j++;
if (j == 4)
{
j = 1;
}
if (s[i] == 3)
{
s[i] = 0;
count--;
}
}
}
}
for (i = 0; i < n; i++)
{
if (s[i] != 0)
{
printf("%d", i + 1);
}
}
return 0;
}