C语言实现报数游戏:找出最后两位幸存者

本题目要求读入2个整数A和B,然后输出2个整数C和D。其中A表示人数,这些人的id分别为1,2,3,…A,他们按照id依次围成一圈。从id为1的人开始报数,报到B的人退出圈,然后从下一个人开始重新报数(即从1开始报数),报到B的人又退出圈,如此反复,直到剩下2人为止。C和D为剩下的2人的id。

输入格式: 在一行中输入大于0但不超过1000的整数A和B。要求A>B。

输出格式: 在一行中输出C和D,由空格隔开。

示例:

输入: 5 3

输出: 1 4

以下是一个示例的C语言程序实现:

#include <stdio.h>

int main() {
    int A, B;
    scanf('%d %d', &A, &B);

    int circle[A];
    int i, j, count;

    // 初始化圈中的人的id
    for(i = 0; i < A; i++) {
        circle[i] = i + 1;
    }

    // 开始报数并退出圈
    i = 0;  // 当前报数的人的索引
    count = 0;  // 计数器,记录已经报了多少次数
    while(A > 2) {
        j = 0;  // 每次从1开始报数
        while(j < B) {
            if(circle[i] != 0) {  // 如果该人还在圈中
                j++;
            }
            if(j == B) {  // 报到B的人退出圈
                circle[i] = 0;
                A--;
            }
            i = (i + 1) % A;  // 下一个人报数
        }
    }

    // 输出剩下的两个人的id
    for(i = 0; i < A; i++) {
        if(circle[i] != 0) {
            printf('%d ', circle[i]);
        }
    }

    return 0;
}

该程序首先读入两个整数A和B,然后根据A的大小创建一个长度为A的数组circle来表示圈中的人的id。然后使用两个循环来模拟报数和退出圈的过程,直到只剩下两个人为止。最后输出剩下的两个人的id。

代码解析:

  1. **初始化圈中的人的id:**使用一个循环将每个人的id存储到数组circle中,从1开始编号。
  2. **报数和退出圈:**使用两个循环模拟报数和退出圈的过程。外层循环控制报数的轮数,内层循环控制每轮报数的次数。
  3. **判断是否还在圈中:**在内层循环中,判断当前报数的人是否还在圈中(即id是否为0),如果还在圈中,则计数器j加1。
  4. **退出圈:**当计数器j等于B时,表示报到B的人,将其在circle数组中的id设置为0,表示退出圈,并将剩余人数A减1。
  5. **下一个报数的人:**使用取模运算来计算下一个报数的人的索引,并继续循环,直到剩余人数为2。
  6. **输出结果:**使用一个循环遍历circle数组,输出剩下的两个人的id。

总结:

本程序通过使用循环和数组来模拟报数和退出圈的过程,实现了找出最后两位幸存者的功能。该程序使用了简单的逻辑和代码,易于理解和实现。

C语言实现报数游戏:找出最后两位幸存者

原文地址: https://www.cveoy.top/t/topic/920 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录