C语言杀人小游戏--n个人围成一圈,依次报数(1到3),报到3的

2019-08-01  本文已影响0人  發財大力

1.问题:n个人围成一圈,顺序排号,从第1个人开始报数(1到3报数),凡报到3的人退出圈子,问最后留下的是原来几号?

2.程序运行效果 数字游戏.gif

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.感悟

今天学习了关于数组的一些知识点,数组这种东西看似简单,实则不然,要想灵活的运用就得对各个知识点融会贯通,今天这个题目起初一看我就一脸懵逼,除了定义几个变量以为我不知从何下手,只能找来本子跟个小学生一样一个一个掰指头来算,不过最后还是勉勉强强的写了出来,如果有什么不对的地方,请指正!

上一篇 下一篇

猜你喜欢

热点阅读