

有没有人看看怎么做😭,我的在VS2022可以编译成功,但是在有的变压器成功不了,怎么办
以下回复参考:皆我百晓生、券券喵儿等免费微信小程序作答:
要解决这个约瑟夫问题,我们可以通过实现一个循环来遍历所有的人,并根据给定的规则进行处理。下面是一种可能的实现方式:
#include<iostream>
using namespace std;
void josephus(int n, int k, int m) {
// 准备数组存储当前的人数
int people[n];
for (int i = 0; i < n; ++i) {
people[i] = i + 1;
}
while (true) {
// 每次循环都更新当前的人数
for (int i = 0; i < n - 1; ++i) {
if (people[i] % m != 0) {
people[i]++;
}
}
// 输出当前的人数序列
for (int i = 0; i < n; ++i) {
cout << people[i] << " ";
}
cout << endl;
// 判断是否到达终点
if (people[n-1] >= n) {
break;
}
}
}
int main() {
int n, k, m;
cin >> n >> k >> m;
josephus(n, k, m);
return 0;
}
这段代码首先定义了一个名为josephus的函数,它接受三个参数:总人数n,起始位置k,以及结束位置m。函数内部,我们初始化一个长度为n的数组people,并将每个人的初始位置设置为其编号加1。
接下来,我们通过一个无限循环来迭代所有的元素。在每次迭代中,我们都检查当前的人数是否能被m整除。如果是,则将当前的人数增加1。这样做的目的是确保每个人都会按顺序报数,并且当某个人在报完数后,会轮到下一个人在其后面报数。
当满足条件时,我们将当前的人数打印出来,并判断是否已经到了最后一个位置。如果不是,就再次调用josephus函数。否则,我们就跳出循环,程序结束。
在这个示例中,我们没有使用任何特定的编程语言或环境,而是展示了基本的算法思想。如果你有特定的编程环境或者想要尝试其他编程语言,可以根据实际情况调整代码。