C++中关联两个数组并按煎饼数量排序输出人员信息
解决煎饼数量排序问题
你的思路没问题,用两个数组分别存人物编号和对应吃的煎饼数量是可行的,核心是排序时要同步交换编号和对应的煎饼数量,这样才能保证排序后编号和数量一一对应。下面是修改后的代码,用选择排序实现从多到少的排序:
#include <iostream> using namespace std; int main() { int cc[10]; // 存储每个人吃的煎饼数量 int pn[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; // 存储人物编号 cout << "请输入每个人吃的煎饼数量:\n\n"; for (int i = 0; i < 10 ; i++){ cout << "Person " << pn[i] << ": "; cin >> cc[i]; } // 选择排序:从多到少排序 for (int i = 0; i < 9; i++) { // 找到当前未排序部分的最大值索引 int maxIndex = i; for (int j = i + 1; j < 10; j++) { if (cc[j] > cc[maxIndex]) { maxIndex = j; } } // 交换煎饼数量 swap(cc[i], cc[maxIndex]); // 同步交换对应的人物编号 swap(pn[i], pn[maxIndex]); } cout << "\n按吃的煎饼数量从多到少排序结果:\n"; for (int i = 0; i < 10 ; i++){ cout << "Person " << pn[i] << ": ate " << cc[i] << " pancakes\n"; } return 0; }
关键说明:
- 排序部分用了选择排序:每次在未排序的部分找到最大值的位置,然后把它和当前未排序部分的第一个元素交换,同时交换对应的人物编号,这样就能保证编号和数量始终匹配。
- 原代码里的循环条件
i < 10 && n < 10没必要,因为i和n是同步递增的,直接写i < 10就行。 - 输出格式调整成了题目要求的样式,和示例一致。
内容的提问来源于stack exchange,提问作者gilewicz
相关产品推荐
相关产品推荐

