2017-04-16 50 views
-1

我想通過條件循環找出第二個最大值。我每次獲得0作爲第二最大值。我的錯誤在哪裏,或者我該怎麼做?如何查找第二個最大值在C++循環中

這裏是我的代碼:

#include<iostream> 
using namespace std; 
int main() 
{ 
    int sum=0,n, c=1; 
    int second_max=0; 
    float avg; 
    int max, min; 
    cin >> n; 
    sum = sum + n; 
    max = min = n; 
    while (n != 0) 
    { 
     cin >> n; 
     if (n==0) 
     break; 
     sum =sum+n; 
     c++; 
     if (max < n) 
      max = n; 
     if(second_max<n && max!=n) //code for finding second highest value 
      second_max = n; 
     if (min>n) 
      min = n; 
    } 
      cout << "sum: " << sum<<'\n'; 
      avg = float(sum)/c; 
      cout << "average: " << avg<<'\n'; 
      cout << "maximum no: " << max<<'\n'; 
      cout << "minimum no: " << min <<'\n'; 
      cout << "2nd maximum no: " << second_max << '\n'; 
} 

回答

1

試試這個:

if (max < n) 
    { 
     second_max = max; // the old max becomes second_max 
     max = n; // max gets the new 'n' value 
    } 
    if(second_max < n && n < max) 
    { 
     second_max = n; 
    } 

的問題是,你沒有轉變舊的「最大」價值「second_max」每當最大增加。所以second_max只是在數量不斷增加的情況下才被更新(max會被改變,從來沒有second_max)。

+0

謝謝你!你真好! –

+0

我需要稍微編輯第二個if語句,因爲如果稍後鍵入* exactly * max的值(second_max將等於max),它會發生錯誤。 –

1

問題是當你找到一個新的最大值時,你應該把它設置爲第二個最大值。如果max只改變一次而第二個max改變,那麼還應該有其他聲明。

while (n != 0) 
{ 
    cin >> n; 
    if (n == 0) 
     break; 
    sum = sum + n; 
    c++; 
    if (max < n) 
    { 
     second_max = max; 
     max = n; 
    } 
    if(second_max < n && n < max) 
    { 
     second_max = n; 
    } 


    if (min>n) 
     min = n; 
}