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

Posted

技术标签:

【中文标题】如何输出哪个用户输入了每个值?【英文标题】:How to output which user has inputted each value? 【发布时间】:2015-09-01 11:54:37 【问题描述】:

我正在做一些初学者练习,并且已经解决了这个问题,'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 等,但我正在努力弄清楚如何将每个吃煎饼的数量分配给吃它们的用户?

我尝试使用与其他两个 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;
    

【问题讨论】:

【参考方案1】:

你的问题是你失去了索引和数字之间的关系。看起来,您需要使用包含此人的 id 和他吃的煎饼数量的数据结构。

struct PancakeEater 
   int numberOfPancakes;
   int personId;
;

如果我是你,我会放弃原始数组,并尝试使用 std::vector&lt;PancakeEater&gt; 并使用像 std::sort 这样的算法。这被描述为in another question。

【讨论】:

【参考方案2】:

此类问题的一个常见技巧是对索引进行排序,而不是对实际值进行排序。

想法如下:创建一个索引数组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++ 用户输入 2个值 定义二维数组 但是报错

Java小案例——对字符串进行加密解密

如何创建一个要求用户输入“最多”20 个整数并使用传递给函数的参数来输出最大值、最小值和平均值的程序?

课程作业四

用python编写脚本程序,实现用户输入3个整数,放入列表,并输出最小值