【问题标题】:How to compare an array of integers and display them from greatest to least in C++如何比较整数数组并在 C++ 中从大到小显示它们
【发布时间】:2017-12-05 17:56:43
【问题描述】:

我正在 Cplusplus.com 网站上做一些练习,以改进我的编程并从我今年参加的课程中学习和重新学习一些材料,下面的问题是我正在工作的问题,特别是最后一个粗体部分。

编写一个程序,要求用户输入 10 个人(第 1 个人、第 2 个人、...、第 10 个人)早餐吃的煎饼数量 输入数据后,程序必须分析数据并输出哪个人早餐吃的煎饼最多。

修改程序,使其输出所有 10 人吃掉的煎饼的数量,例如..

第 4 个人:吃了 10 个煎饼

第 3 个人:吃了 7 个煎饼

第 8 个人:吃了 4 个煎饼

等等...

这是我目前所拥有的

#include <iostream>

using namespace std;

void getPancakesEaten(int pancakes[]);
void comparePancakesEaten(int pancakes[]);
void displayOrder(int pancakes[]);


/**********************************************************************
* Gets the amount of Pancakes eaten
***********************************************************************/
void getPancakesEaten(int pancakes[])
{

    for(int i = 0; i < 10; i++)
    {
        cout << "Person " << i + 1 << ": ate ";
        cin >> pancakes[i];
    }

    cout << endl;
}

/**********************************************************************
* Compares the amount of pancakes eaten with each person
***********************************************************************/
void comparePancakesEaten(int pancakes[])
{
    if(pancakes[0] > pancakes[1] && pancakes[0] > pancakes[2] && pancakes[0] >               pancakes[3] && pancakes[0] > pancakes[4] && pancakes[0] > pancakes[5] && pancakes[0] > pancakes[6] && pancakes[0] > pancakes[7] && pancakes[0] > pancakes[8] && pancakes[9])
{
    cout << "Person 1 ate " << pancakes[0] << " pancakes" << endl;
}

else if(pancakes[1] > pancakes[0] && pancakes[1] > pancakes[2] && pancakes[1] > pancakes[3] && pancakes[1] > pancakes[4] && pancakes[1] > pancakes[5] && pancakes[1] > pancakes[6] && pancakes[1] > pancakes[7] && pancakes[1] > pancakes[8] && pancakes[1] > pancakes[9])
{
    cout << "Person 2 ate " << pancakes[1] << " pancakes" << endl;
}

else if(pancakes[2] > pancakes[0] && pancakes[2] > pancakes[1] && pancakes[2] > pancakes[3] && pancakes[2] > pancakes[4] && pancakes[2] > pancakes[5] && pancakes[2] > pancakes[6] && pancakes[2] > pancakes[7] && pancakes[2] > pancakes[8] && pancakes[2] > pancakes[9])
{
    cout << "Person 3 ate " << pancakes[2] << " pancakes" << endl;
}

else if(pancakes[3] > pancakes[0] && pancakes[3] > pancakes[2] && pancakes[3] > pancakes[1] && pancakes[3] > pancakes[4] && pancakes[3] > pancakes[5] && pancakes[3] > pancakes[6] && pancakes[3] > pancakes[7] && pancakes[3] > pancakes[8] && pancakes[3] > pancakes[9])
{
    cout << "Person 4 ate " << pancakes[3] << " pancakes" << endl;
}

else if(pancakes[4] > pancakes[0] && pancakes[4] > pancakes[2] && pancakes[4] > pancakes[3] && pancakes[4] > pancakes[1] && pancakes[4] > pancakes[5] && pancakes[4] > pancakes[6] && pancakes[4] > pancakes[7] && pancakes[4] > pancakes[8] && pancakes[4] > pancakes[9])
{
    cout << "Person 5 ate " << pancakes[4] << " pancakes" << endl;
}

else if(pancakes[5] > pancakes[0] && pancakes[5] > pancakes[2] && pancakes[5] > pancakes[3] && pancakes[5] > pancakes[4] && pancakes[5] > pancakes[1] && pancakes[5] > pancakes[6] && pancakes[5] > pancakes[7] && pancakes[5] > pancakes[8] && pancakes[5] > pancakes[9])
{
    cout << "Person 6 ate " << pancakes[5] << " pancakes" << endl;
}

else if(pancakes[6] > pancakes[0] && pancakes[6] > pancakes[2] && pancakes[6] > pancakes[3] && pancakes[6] > pancakes[4] && pancakes[6] > pancakes[5] && pancakes[6] > pancakes[1] && pancakes[6] > pancakes[7] && pancakes[6] > pancakes[8] && pancakes[6] > pancakes[9])
{
    cout << "Person 7 ate " << pancakes[6] << " pancakes" << endl;
}

else if(pancakes[7] > pancakes[0] && pancakes[7] > pancakes[2] && pancakes[7] > pancakes[3] && pancakes[7] > pancakes[4] && pancakes[7] > pancakes[5] && pancakes[7] > pancakes[6] && pancakes[7] > pancakes[1] && pancakes[7] > pancakes[8] && pancakes[7] > pancakes[9])
{
    cout << "Person 8 ate " << pancakes[7] << " pancakes" << endl;
}

else if(pancakes[8] > pancakes[0] && pancakes[8] >  pancakes[2] && pancakes[8] > pancakes[3] && pancakes[8] > pancakes[4] && pancakes[8] > pancakes[5] && pancakes[8] > pancakes[6] && pancakes[8] > pancakes[7] && pancakes[8] > pancakes[1] && pancakes[8] > pancakes[9])
{
    cout << "Person 9 ate " << pancakes[8] << " pancakes" << endl;
}

else if(pancakes[9] > pancakes[0] && pancakes[9] > pancakes[2] && pancakes[9] > pancakes[3] && pancakes[9] > pancakes[4] && pancakes[9] > pancakes[5] && pancakes[9] > pancakes[6] && pancakes[9] > pancakes[7] && pancakes[9] > pancakes[8] && pancakes[9] > pancakes[1])
{
    cout << "Person 10 ate " << pancakes[9] << " pancakes" << endl;
}

cout << "\n";
}

/**********************************************************************
* Displays the order in which person ate the most pancakes to the least
***********************************************************************/
void displayOrder(int pancakes[])
{
    for(int i = 9; i >= 0; i--)
    {
        for(int j = 0; j < 9; j++)
        {
            if(pancakes[j] > pancakes[j + 1])
            {
                int temp = pancakes[j + 1];

                pancakes[j + 1]= pancakes[j];

                pancakes[j]=temp;
            }
        }

    cout << "Person " << i + 1 << ": ate " << pancakes[i] << " pancake(s)" << endl;

   }

}

/**********************************************************************
* Runs the Entire Program
***********************************************************************/
int main()
{
    int pancakes[256];
    getPancakesEaten(pancakes);
    comparePancakesEaten(pancakes);
    displayOrder(pancakes);
}

我遇到的问题是,当我尝试显示正确的顺序时,与煎饼数量相关的人有时会根据输入不正确。

人 1:吃了 12 第 2 个人:吃了 22 第 3 个人:吃了 3 个 第 4 人:吃了 4 个 第 5 人:吃了 5 个 第 6 人:吃了 6 个 第 7 个人:吃了 7 个 第 8 人:吃了 8 个 人 9:吃了 9 第 10 人:吃了 10 个 第 2 个人吃了 22 个煎饼 第 10 人:吃了 22 个煎饼 第 9 人:吃了 12 个煎饼 第 8 人:吃了 10 个煎饼 第 7 人:吃了 9 个煎饼 第 6 人:吃了 8 个煎饼 第 5 人:吃了 7 个煎饼 第 4 人:吃了 6 个煎饼 第 3 人:吃了 5 个煎饼 第 2 个人:吃了 4 个煎饼 第 1 人:吃了 3 个煎饼

为什么我为“Person 2”输入的值没有显示在“Person 10”上?是因为我的 displayOrder 函数中的 for 循环吗?

【问题讨论】:

标签: c++ arrays logic


【解决方案1】:

您需要先对数组进行排序,然后再显示它。尝试更多类似的方法:

#include <iostream>
#include <algorithm>

using namespace std;

void getPancakesEaten(int pancakes[10]);
void displayOrder(int pancakes[10]);


/**********************************************************************
* Gets the amount of Pancakes eaten
***********************************************************************/
void getPancakesEaten(int pancakes[10])
{
    for(int i = 0; i < 10; i++)
    {
        cout << "Person " << i + 1 << ": ate ";
        cin >> pancakes[i];
    }

    cout << endl;
}

/**********************************************************************
* Displays the order in which person ate the most pancakes to the least
***********************************************************************/
void displayOrder(int pancakes[10])
{
    int order[10];
    for (int i = 0; i < 10; ++i)
        order[i] = i;

    sort(order, order+10, [&pancakes](int a, int b){ return pancakes[a] > pancakes[b]; });

    for(int i = 0; i < 10; ++i)
        cout << "Person " << order[i] + 1 << ": ate " << pancakes[order[i]] << " pancake(s)" << endl;
}

/**********************************************************************
* Runs the Entire Program
***********************************************************************/
int main()
{
    int pancakes[10];
    getPancakesEaten(pancakes);
    displayOrder(pancakes);
}

Live demo

【讨论】:

  • 在 displayOrder 函数的两个 for 循环中,为什​​么要在 ++i 而不是 i++ 之前迭代项目?
  • ++ii++ 都递增 i,但 ++i 效率稍高一些,因为它先执行递增然后返回结果,而 i++ 在之后返回旧值执行增量。在这样的循环中,一种或另一种方式并不重要,但我更喜欢使用++i 而不是i++ 以避免未使用的开销
  • 当您执行#include 时,排序功能是否内置在 C++ 中?
  • @JustinBengtson:是的,就是STL中的std::sort()算法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-06-15
  • 2021-08-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-03
相关资源
最近更新 更多