簡體   English   中英

在 C++ 中尋找最小值最大值

[英]Finding min max in C++

我的練習如下:給定一個包含 N 個整數的列表,找到它的平均值(作為雙精度值)、最大值、最小值和范圍。 您的程序將首先要求用戶輸入 N,即列表中整數的數量。 然后用戶將再輸入 N 個數字。

這是我的代碼:

#include "stdafx.h"
#include <iostream>
using namespace std;

int main()
{
    int n;
    cout << "Input n: ";
    cin >> n;

    int first;             //**LINE NUMBER 1**
    cout << "No 1 is: ";
    cin >> first;
    int max = first;
    int min = first;

    for (int i=1; i<n;i++) //**LINE NUMBER 2**
    {
        int x;
        cout << "No " << i+1 << " is: ";
        cin >> x;
        first = x;         //**LINE NUMBER 3**
        if (max < x)
        {
           max = x;
        }
        if (min > x)
        {
           min = x;
        }
    }
    cout << "max is: " << max << endl;
    cout << "min is: " << min << endl;
    cout << "mean is: " << (double) (max+min)/2 << endl; //**LINE NUMBER 4**
    cout << "range is: " << max - min << endl;

    return 0;
}

但是,解決方案有點不同:

  • 對於第 1 行,它是int first=0; 而不是int first;

  • 對於第 2 行,它是for (int i=1; i<n;++i)而不是for (int i=1; i<n;i++)

  • 對於第 3 行,首先是first += x; 而不是first = x;

  • 對於第 4 行,它是cout << "mean is: " << (double) first/n<< endl; 而不是cout << "mean is: " << (double) (max+min)/2 << endl;

我嘗試了一些示例,但兩種代碼產生的結果完全相同。 這是為什么? 還是我哪里錯了?

好:

沒有一條線本身是錯誤的。 更重要的是,它們只是最好以另一種方式完成。 IE:

  • int first =0只是確保first == 0開始。 int first; 可能會導致問題,因為它最初被分配給一個任意數字(無論發生在變量指向的內存地址處)

  • 盡管++ii++在 for 循環中的工作方式與迭代器相同,但它們在其他用法上有非常細微的差別。 在這里閱讀更多相關信息

  • first += x本質上是first = first + x ,它更清楚地概述了你的代碼和它之間的區別。 這也很清楚為什么int first = 0如此重要。 如果first是某個隨機值,那么所有數字的總和(應該是first )將被隨機分配為從一個數字開始,而不總是 0。

  • 事實上,這最后一個是您唯一錯誤的地方。 mean定義為所有數據的總和除以數據點的數量(與average相同),其中median被描述為數據的中點,或描述最大值和最小值之間中點的數字您的數據。 你在哪里計算你認為的mean實際上是median 這樣做的復雜之處在於,有時,根據您的數據, mean = median 例如,如果您的數據是3,4,5那么均值和中位數都等於4

我希望這能為你澄清事情:)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM