【问题标题】:Trouble finding highest/lowest element in array C++在数组 C++ 中查找最高/最低元素时遇到问题
【发布时间】:2014-02-17 23:29:50
【问题描述】:

我对 C++ 很陌生,只有 C#、Python 和 JS 方面的经验,所以请多多包涵!

我将用户输入的 5 个分数存储在一个数组中。我传递数组并评估数组中的分数以找到最小值和最大值。我需要去掉这两个,然后找到其他 3 个值的平均值。我的问题是,我没有找到最高/最低值。我在 findLowest() 和 findHighest() 中有逻辑,但为了测试它,我在 main() 中放置了相同的逻辑,以查看它是否在它通过之前工作,并且它不工作。有人可以指导我找到数组中的最高/最低值吗?谢谢!

#include "stdafx.h"
#include <iostream>
#include <cmath>
#include <iomanip>
#include <algorithm>

using namespace std;

void getJudgeData(double score)
{
    cin >> score;
    if (score > 10 || score < 0)
    {
        cout << "Invalid score, please enter again." << endl;
        cin >> score;
    }
    else
    {
    cout << "Thank you." << endl;
    }
}

double findLowest(double scores[])
{
    double lowScore = *min_element(scores, scores+5);

    return lowScore;
}

double findHighest(double scores[])
{
    double highScore = *max_element(scores, scores+5);

    return highScore;
}
double calcScore(double scores[])
{
    double finalScore;
    double sum = 0;
    double newScore[3] = {};

    double lowScore = findLowest(scores);
    double highScore = findHighest(scores);
    int j = 0;
    for (int i=0; i < 5; i++)
    {
        if (scores[i] != lowScore && scores[i] != highScore)
        {
            scores[i] = newScore[j];
            j++;
        }
    }
    for (int k=0; k < 3; k++)
    {
        sum = sum + newScore[k];
    }
    finalScore = sum/3;
    return finalScore;
}    

int main()          
{
    double finalScore;
    double judgeScores[5] = {};
    for (int i = 0; i < 5; ++i)
    {
        cout << "Enter judge " << i + 1 << "'s score: ";
        getJudgeData(judgeScores[i]);
    }
    finalScore = calcScore(judgeScores);
    cout << "Highest score is: " << *max_element(judgeScores, judgeScores+5) << endl;
    cout << "The final score is: " << finalScore << endl;

    // This prevents the Console Window from closing during debug mode
    cin.ignore(cin.rdbuf()->in_avail());
    cout << "\nPress only the 'Enter' key to exit program: ";
    cin.get();

    return 0;
}

【问题讨论】:

  • 除此之外,如果有人多次输入相同的分数并且恰好是最高或最低分数,您将会遇到一些问题。
  • 尝试使用向量,对向量进行排序,删除最高和最低的元素(第一个和最后一个)。 :-)

标签: c++ arrays function


【解决方案1】:

这是因为 getJudgeData 采用 double score 的值。结果,最终用户的条目仍然局限于getJudgeData 函数;传递给函数的 judgeScores[i] 变量保持不变。

添加一个 & 符号来解决这个问题:

void getJudgeData(double &score) {
    ...
}

现在参数通过引用传递,让getJudgeData对其进行修改。

【讨论】:

    【解决方案2】:

    改变

    void getJudgeData(double score)
    

    void getJudgeData(double &score)
    

    【讨论】:

      【解决方案3】:

      看起来你的大部分逻辑都没有问题,除了你在calcScore() 中交换了你的作业。你有:

      scores[i] = newScore[j];
      

      你的意思可能是:

      newScore[j] = scores[i];
      

      另外,请注意:如果您的输入数组包含多个等于最小值或最大值的分数,则删除它们后剩余的分数将少于 3。

      编辑:哦,是的,还有其他人所说的通过引用 getJudgeData() 传递值。

      【讨论】:

      • 您可以删除它们并跟踪您复制到 newScore 的实际项目数(并使用该计数而不是假设 3;在您的情况下,j 将留下数字复制的项目 [并小心处理剩下的 0 个项目]),或者您可以决定留下重复项,只删除最低的一项和最高的一项(总是留下 3 个)。取决于您,取决于您希望它的行为方式。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-03-04
      • 1970-01-01
      • 2015-04-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-02-24
      相关资源
      最近更新 更多