1.问题:n个人围成一圈,顺序排号,从第1个人开始报数(1到3报数),凡报到3的人退出圈子,问最后留下的是原来几号?
2.程序运行效果
3.解题思路
先从键盘获取用户输入人数,用while循环来寻找报数号码为3号的人,在一开始时给每个人赋值为1(1为存活,0为死亡),每循环一次num值加1,直到num值为3时,说明此时这个人报的数为3,需要淘汰,则将原来的赋值变为0,此时再用sum记录淘汰的人数,最后跟总人数比较,直到剩下一个人为止。
4.代码实现
// 数字游戏.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
#include <iostream>
int main()
{
int k, i;
int num = 0;//用来记录循环次数,当num=3是说明报数报到3了
int sum = 0;//用来记录一共淘汰了几个人
int people[100];
bool key = true;//用来确定循环是否执行
printf("请输入参与游戏人数:");
scanf("%d", &k);
for (int i = 0; i < k;i++) {
people[i] = 1;
//printf("参与游戏人数:%d",people[i]);
}
while (key)
{
i = 0;//初次循环时数组的下标
while (i<k)
{
if (people[i]==1)
{
num = num + 1;//每个人报数
}
if (num==3)
{
people[i] = 0;
sum = sum + 1;//记录淘汰人数
num = 0;
}
i++;//循环一次下标加1
}
if (sum==k-1)//用来确定是否只剩下一个人,如果是就不执行while循环
{
key = false;
}
}
for (int i= 0;i < k; i++)
{
if (people[i]==1){
printf("余下人的号码为:%d\n\n", i + 1);
break;
}
}
return 0;
}
5.感悟
今天学习了关于数组的一些知识点,数组这种东西看似简单,实则不然,要想灵活的运用就得对各个知识点融会贯通,今天这个题目起初一看我就一脸懵逼,除了定义几个变量以为我不知从何下手,只能找来本子跟个小学生一样一个一个掰指头来算,不过最后还是勉勉强强的写了出来,如果有什么不对的地方,请指正!