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,由空格隔开。
实现该程序的 C 代码如下:
#include <stdio.h>
int main() {
int A, B;
scanf("%d %d", &A, &B);
// 初始化人员 ID 数组
int people[A];
for (int i = 0; i < A; i++) {
people[i] = i + 1;
}
int count = 0; // 报数
int index = 0; // 当前人员索引
while (A > 2) {
count++;
if (count == B) {
// 该人退出圈
for (int i = index; i < A - 1; i++) {
people[i] = people[i + 1];
}
A--;
count = 0;
} else {
index++;
}
if (index == A) {
index = 0;
}
}
printf("%d %d\n", people[0], people[1]);
return 0;
}
通过以上代码,我们可以实现根据输入的 A 和 B,输出剩下的两个人的 ID。
原文地址: https://www.cveoy.top/t/topic/9Cu 著作权归作者所有。请勿转载和采集!