C语言实现报数游戏:找出最后两位幸存者
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。
代码解析:
- **初始化圈中的人的id:**使用一个循环将每个人的id存储到数组circle中,从1开始编号。
- **报数和退出圈:**使用两个循环模拟报数和退出圈的过程。外层循环控制报数的轮数,内层循环控制每轮报数的次数。
- **判断是否还在圈中:**在内层循环中,判断当前报数的人是否还在圈中(即id是否为0),如果还在圈中,则计数器j加1。
- **退出圈:**当计数器j等于B时,表示报到B的人,将其在circle数组中的id设置为0,表示退出圈,并将剩余人数A减1。
- **下一个报数的人:**使用取模运算来计算下一个报数的人的索引,并继续循环,直到剩余人数为2。
- **输出结果:**使用一个循环遍历circle数组,输出剩下的两个人的id。
总结:
本程序通过使用循环和数组来模拟报数和退出圈的过程,实现了找出最后两位幸存者的功能。该程序使用了简单的逻辑和代码,易于理解和实现。
原文地址: https://www.cveoy.top/t/topic/920 著作权归作者所有。请勿转载和采集!