我正在进行一些初学者练习,并且得到了这个问题,“Pancake Glutton'。
"写一个程序,要求用户输入由10个不同的人(第1人,第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等。但是我很难弄清楚如何分配每个煎饼的用户谁吃了?< / p>
我尝试使用与其他两个for循环相同的技术,但我知道它不正确,因为这种方法并不能指定用户吃掉的煎饼数量。 / p>
我觉得我在这里错过了一些非常简单的东西!谢谢你的帮助!
#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;
}
}
答案 0 :(得分:2)
你的问题是你失去了索引和数字之间的关系。看起来,你需要使用一个包含人的身份和他吃的煎饼数量的数据结构。
struct PancakeEater {
int numberOfPancakes;
int personId;
};
如果我是你,我会放弃原始数组,并尝试使用std::vector<PancakeEater>
并使用像std::sort
这样的算法。这被描述为in another question。
答案 1 :(得分:1)
此类问题的一个常见技巧是对索引进行排序,而不是对实际值进行排序。
这个想法是:创建一个索引数组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;
}