問題描述
這一道試題並不難,但是好多小夥伴寫完之後提交上去發現並沒能得到100分,問題出在哪裏了呢?我稍微總結了一下,大概分爲以下幾點:
- 沒有嚴格按照題目要求的格式進行輸出
題目中要求對於整數要直接輸出整數,對於可能出現的分數要輸出四捨五入保留一位小數的結果,必須要嚴格按照這個要求來輸出。題目中可能出現小數的變量只有mid(中位數)這一個,那麼這個變量一定是 double 或 float 類型的變量,如果最終mid得到了一個整數值,就要強制類型轉換成整型變量然後再輸出,不能直接輸出mid。 - 四捨五入保留一位小數的問題
這道題目在計算中位數時有可能會出現小數,但是中位數有小數的情況一定是兩個整數相加之後除以二得到的,而這個操作最多隻能有一位小數。所以本題中的四捨五入保留一位小數的問題可以不用單獨考慮。 - 數據存儲問題
這道題要求輸入一串遞增有序或遞減有序的數列,但並不是每一個數都要用,我們需要對只是這些數中的最大值、中位數和最小值,所以沒必要用一個數組把他們全部存起來。只需要根據要求在輸入的時候選取有用的數值即可。
滿分參考代碼如下:
#include <iostream>
using namespace std;
int main() {
int n;
int max, min, t;
double mid = 0;
cin >> n;
for (int i = 1; i <= n; i++) {
if (i == 1)
cin >> max;
else if (i == n)
cin >> min;
//有偶數個數,取中間兩個數的平均數
else if (n % 2 == 0 && (i == n / 2 || i == n / 2 + 1)) {
cin >> t;
mid += t / 2.0;
}
//有奇數個數,那麼中位數就是最中間的那個
else if (n % 2 == 1 && i == (n + 1) / 2)
cin >> mid;
else
cin >> t; //其他數據無用
}
if (max < min) {
t = max;
max = min;
min = t;
}
//判斷mid是否是整數,分別以不同形式輸出
if (mid - (int)mid == 0)
cout << max << ' ' << (int)mid << ' ' << min;
else
cout << max << ' ' << mid << ' ' << min;
}