如何输出哪个用户输入了每个值

How to output which user has inputted each value?

本文关键字:用户 输入 何输出 输出      更新时间:2023-10-16

我正在做一些初级练习,遇到了这个问题,'贪吃煎饼'。

"编写一个程序,要求用户输入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;
}