CCF試題 201903-1 小中大 沒得滿分的原因

問題描述

在這裏插入圖片描述
在這裏插入圖片描述
這一道試題並不難,但是好多小夥伴寫完之後提交上去發現並沒能得到100分,問題出在哪裏了呢?我稍微總結了一下,大概分爲以下幾點:

  1. 沒有嚴格按照題目要求的格式進行輸出
    題目中要求對於整數要直接輸出整數,對於可能出現的分數要輸出四捨五入保留一位小數的結果,必須要嚴格按照這個要求來輸出。題目中可能出現小數的變量只有mid(中位數)這一個,那麼這個變量一定是 double 或 float 類型的變量,如果最終mid得到了一個整數值,就要強制類型轉換成整型變量然後再輸出,不能直接輸出mid。
  2. 四捨五入保留一位小數的問題
    這道題目在計算中位數時有可能會出現小數,但是中位數有小數的情況一定是兩個整數相加之後除以二得到的,而這個操作最多隻能有一位小數。所以本題中的四捨五入保留一位小數的問題可以不用單獨考慮。
  3. 數據存儲問題
    這道題要求輸入一串遞增有序或遞減有序的數列,但並不是每一個數都要用,我們需要對只是這些數中的最大值、中位數和最小值,所以沒必要用一個數組把他們全部存起來。只需要根據要求在輸入的時候選取有用的數值即可。

滿分參考代碼如下:

#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;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章