题目描述
有n人围成一圈,顺序排号。从第1个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来的第几号的那位。
输入
初始人数为n
输出
最后一人的初始编号
样例输入 Copy
3
样例输出 Copy
2
答案
#include<stdio.h>
int main()
{
int n, i, j;
int flag = 0, sum = 0;
int a[1000] = {0};
scanf("%d", &n);
while (1)/*死循环*/
{
for (i = 1; i <= n; i++)
{
if (a[i] > 0)
/*判断a[i]是不是被标记的同学,如果是跳过下面的步骤,对 i + 1号同学进行下述操作*/
{
continue;
}
flag++;
if (flag % 3 == 0)/*对报数3的同学进行记录,并且sum存入已经报3同学的数目*/
{
a[i]++;/报三同学的标记为1*/
sum++;
}
}
if (sum == n - 1)/*判断是否只剩一个同学没有标记为1*/
{
break;/*跳出循环*/
}
}
for (i = 1; i <= n; i++)
{
if (a[i] == 0)
{
printf("%d", i);
break;/找到最后的那个同学输出他的号码
}
}
return 0;
}
尝试用函数来写ing