不会做求帮忙!需要C++的
有n个人排成一圈,从1到n编号。从第一个人开始依次报数(第一个人报的数是1,下一个人报的数是2(当前这个人报的数字等于前面那个人报的数字加一),报数一共进行 n轮,对于第 i(1≤i≤n)轮,数到i的平方的人出列,下一个人继续从1开始报数。结束的时候所有人都会出列。请依次输出每一轮出列的人的编号。
不会做,是约瑟夫问题的改版
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
3条回答 默认 最新
关注 引自免费微信小程序:皆我百晓生
解题步骤如下:
- 初始化一个整型变量
i
表示当前轮数,初始值为 0。 - 定义一个整型数组
arr
,用于存储每个轮数出列的人的编号。 - 使用一个循环遍历
n
次: a. 当轮数i
超过0时,将arr[i]
的相应元素赋给out
变量,并清空数组。 b. 否则,获取arr[i]
的值,即当前轮数i
的平方。 c. 将arr[i]
的值添加到out
数组末尾,表示下一个轮数的出列人。 d. 在循环内执行余下的所有轮数操作。 - 循环结束后,返回
out
数组中的所有元素。
以下是 C++ 实现的代码示例:
#include <iostream> #include <vector> std::vector<int> printOuts(int n, std::vector<int>& arr) { int i = 0; std::vector<int> out(n); while (i <= n) { out[i] = i * i; ++i; } return out; } int main() { int n; std::cout << "Enter the number of rounds: "; std::cin >> n; std::vector<int> arr(n); for (int i = 0; i < n; ++i) { arr[i] = i + 1; } std::vector<int> outs = printOuts(n, arr); for (const auto& num : outs) { std::cout << "Number: " << num << std::endl; } return 0; }
这个代码定义了一个名为
printOuts
的函数,它接收两个参数:目标轮数n
和原始排序的整数向量arr
。函数内部通过迭代找出第n
次轮的所有出列人的编号,并将其输出到控制台。在主程序中,我们要求用户输入想要处理的轮数n
,并调用printOuts
函数并将结果保存到outs
数组中。然后,我们遍历outs
数组并打印出每一项编号。在运行此代码后,您将看到类似以下的结果:
Enter the number of rounds: 5 Number: 1 Number: 4 Number: 9 Number: 16 Number: 25
这就是按需调整
n
值后的每一轮出列人的编号。其中第一轮和第五轮出列的是重复号码,而前四轮则对应各轮出列人数的平方。解决 无用评论 打赏 举报 编辑记录- 初始化一个整型变量
悬赏问题
- ¥15 preLaunchTask"C/C++: aarch64- apple-darwin22-g++-14 生成活动 文件”已终止,退出代码为-1。
- ¥18 关于#贝叶斯概率#的问题:这篇文章中利用em算法求出了对数似然值作为概率表参数,然后进行概率表计算,这个概率表是怎样计算的呀
- ¥20 C#上传XML格式数据
- ¥15 elementui上传结合oss接口断点续传,现在只差停止上传和继续上传,各大精英看下
- ¥100 单片机hardfaulr
- ¥20 手机截图相片分辨率降低一半
- ¥50 求一段sql语句,遇到小难题了,可以50米解决
- ¥15 速求,对多种商品的购买力优化问题(用遗传算法、枚举法、粒子群算法、模拟退火算法等方法求解)
- ¥100 速求!商品购买力最优化问题(用遗传算法求解,给出python代码)
- ¥15 虚拟机检测,可以是封装好的DLL,可付费