题目描述
约瑟夫问题是一个有趣的游戏。有n个人围成一圈,从第一个人开始沿顺时针方向报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那个人?
输入要求
输入一个整数n。(n<=1000)
输出要求
输出最后剩下的数。
输入样例
5
输出样例
4
#include<stdio.h>
int main()
{
int n, sum = 1,num;
int a[1002] = { 0 };
scanf_s("%d", &n);
num = n;
while (n > 1) {
int x = 2;
while (x > 0) {
while (a[sum] == 1) {
if (sum == num)sum = 1;
else sum++;
}
x--;
if (sum == num)sum = 1;
else sum++;
}
while (a[sum] == 1) {
if (sum == num)sum = 1;
else sum++;
}
a[sum] = 1;
n--;
if (sum == num)sum = 1;
else sum++;
}
for (int i = 1; i <= num; i++)if (a[i] == 0) {
printf("%d\n", i);
break;
}
return 0;
}