题目描述
n个人围成一圈,顺序排号,从第一个人开始报数(1~3),凡是报到3的人退出圈子,问最后留下来的是原来的第几号
输入样例
input number of person n = 6
输出样例
The last one is NO.1
代码示例
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main(void)
{
int num[50], i, k, m, n, * p;
printf("\ninput number of person n = ");
scanf("%d", &n);
p = num;
for (i = 0; i < n; i++)
*(p + i) = i + 1;
i = 0;
k = 0;
m = 0;
while (m < n - 1)//退出人数小于n-1执行
{
if (*(p + i) != 0)
k++;
if (k == 3)
{
*(p + i) = 0;
k = 0;//重置报数
m++;//出局人数++
}
i++;
if (i == n)i = 0;//重新指向开头
}
while (*p == 0)p++;//遍历查找最后一个人
printf("The last one is NO.%d\n", *p);
return 0;
}