一、题目要求:
报数:有n个人围成一圈,顺序排号。从第1个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。
二、解题思想:
解法:
1.定义一个很大整形数组,以及一个当前要喊的数字变量(变化范围是1~3)
2.给数组中非3位置进行赋值 - - 赋值要喊的数字
3.到达数组末尾,则从数组起始位置继续开始
4.直到数组中只有一个位置非3,则结束
假设有5个人报数:
三、输入:
5
四、输出:
最后留下的人是4号
五、程序:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
int count;//总人数
int arr[128];//记录每个人喊得号
int digit = 1;//要喊得号
printf("请输入总人数:");
scanf("%d", &count);
int remain=count;//剩余人数
while (remain > 1)
{
for (int i = 0; i < count; i++)
{
if (arr[i] == 3)continue;
arr[i] = digit;
if (digit == 3)
{
digit = 0;
remain--;
}
digit++;
}
}
for (int i = 0; i < count; i++)
{
if (arr[i] != 3)
{
printf("最后留下的人是%d号\n", i + 1);
}
}
//for (int i = 0; i < count; i++)
//{
// printf("%d ", arr[i]);
//}
return 0;
}