如何输出哪个用户输入了每个值
How to output which user has inputted each value?
我正在做一些初级练习,遇到了这个问题,'贪吃煎饼'。
"编写一个程序,要求用户输入10个不同的人(Person 1, Person 2,…)早餐吃了多少煎饼。"(第10个人)一旦输入数据,程序必须分析数据并输出哪个人早餐吃的煎饼最多。
★修改程序,使其也输出哪个人早餐吃的煎饼最少。
★★★★修改程序,使其按照10个人吃的煎饼数量的顺序输出一个列表。
。
Person 4: ate 10 pancakes
Person 3: ate 7 pancakes
Person 8: ate 4 pancakes
...
Person 5: ate 0 pancakes"
我已经设法输出最多和最少数量的煎饼吃,但我被困在最后一点!
我可以按降序输出吃的煎饼的数量,即6,5,4,3,2等,但我正在努力解决如何将每个煎饼的数量分配给吃它们的用户?
我试过使用与其他两个for循环相同的技术,但我知道这是不正确的,因为这个方法没有为用户分配他们吃的煎饼的数量。
我觉得我在这里错过了一些非常简单的东西!谢谢你的帮助!
#include <iostream>
using namespace std;
int main()
{
cout << "how many pancakes did you eat for breakfast?" << endl;
int person1, person2, person3, person4, person5;
cout << "Person 1: ";
cin >> person1;
cout << "Person 2: ";
cin >> person2;
cout << "Person 3: ";
cin >> person3;
cout << "Person 4: ";
cin >> person4;
cout << "Person 5: ";
cin >> person5;
int array[5] = {person1, person2, person3, person4, person5};
int temp = 0;
int res = -1;
for (int i = 0; i < 5; i++)
{
if (array[i] > temp)
{
temp = array[i];
res = i;
}
}
cout << "The most pancakes eaten was " << temp << " by Person " << (res+1) << endl;
int smallest = array[0];
int res2 = 0;
for (int i = 1; i < 5; i++)
{
if (array[i] < smallest)
{
smallest = array[i];
res2 = i;
}
}
cout << "The least pancakes eaten was " << smallest << " by Person " << (res2+1) << endl;
int temp3 = 0;
int res3 = 0;
for (int i = 0; i < 5; i++)
{
for (int j = 0; j < 5; j++)
{
if (array[i] > array[j])
{
temp3 = array[i];
array[i] = array[j];
array[j] = temp3;
res3 = i;
}
}
}
for (int i = 0; i < 5; i++)
{
cout << "Person " << res3 << " ate " << array[i] << " pancakes" << endl;
}
}
您的问题是您失去了索引和数字之间的关系。看起来,您需要使用包含该人的id和他吃的煎饼数量的数据结构。
struct PancakeEater {
int numberOfPancakes;
int personId;
};
如果我是你,我会放弃原始数组,并尝试使用std::vector<PancakeEater>
和std::sort
这样的算法。
解决这类问题的一个常见技巧是对索引排序,而不是对实际值排序。
思路如下:创建一个索引数组idx
,并用数字0到N
填充它,其中N
在您的示例中是5。然后用两个修改来排序:
- 不是比较
array[i]
和array[j]
,而是比较array[idx[i]]
和array[idx[j]]
, - 不交换
array[i]
和array[j]
,而是交换idx[i]
和idx[j]
排序完成后,数组idx
表示吃煎饼的人的索引,按照他们吃的煎饼的数量排序。例如,如果您输入
3 5 6 2 4
那么你的idx
数组在排序后看起来像这样:
2 1 4 0 3
您可以打印这个数组以及array[]
的内容,以产生所需的输出:
for (int i = 0 ; i != N ; i++) {
cout << "Person " << (idx[i]+1) << " ate " << array[idx[i]] << " pancakes" << endl;
}
相关文章:
- C++如何通过用户输入删除列表元素
- 如何使用用户输入在C++中正确填充2D数组
- C++MySQL C api用户输入行
- 如何只允许用户输入正整数
- C++如何计算用户输入的数字中的偶数位数
- 通过for循环使用用户输入填充列表
- 在C++中,我如何接受不同于同一行的用户输入
- 如果用户输入无效,如何使用字符串变量-C++重复输入命令
- 显示基于用户输入的整数的字符
- 根据用户输入用字母填充矢量,并将"开始"和"结束"放在四肢
- 我试图制作一个程序,要求用户输入问题和答案,但程序循环不正确
- 打印时有二叉树问题.用户输入不打印任何内容
- C ++奇怪的数组由用户输入
- 如何允许大写和小写用户输入?
- C++读取用户输入而不按回车键(Mac OS X),与Turbo Pascal中的读取键相同
- 如何存储用户输入的所有数据,然后在他们想要查看所有数据时显示它们
- 如何使用用户输入变量制作二维数组?
- 用户输入字符串的文件附加问题..C++
- 遇到此问题时遇到困难:允许用户输入数组的值并使用 for,而循环也输出输入的最大数字
- 如何使用递归循环我的代码(当用户输入无效输入时,它会再次提示他们)?