題目背景:
在資料分析中,最小值最大值以及中位數是常用的統計資訊。
題目描述:
老師給了你n個整數組成的測量資料,保證有序(可能為公升序或降序),可能存在重複的資料。請統計出這組測量資料的最大值、中位數以及最小值,並按照從大到小的順序輸出這三個數。
輸入格式:
從標準輸入讀入資料。
第一行輸入乙個整數n,在第二行中存在n個有序的整數,表示測量資料,可能為公升序或降序排列,可能存在連續多個整數相等,整數與整數之間使用空格隔開。
輸出格式:
輸出到標準輸出。
包含一行,包括最大值、中位數以及最小值共三個數,並按照從大到小的順序輸出。資料與資料之間使用空格隔開。對與整數請直接輸出整數,對於可能出現的分數,請輸出四捨五入保留1位小數的結果。
樣例1
輸入:
3
-1 2 4
輸出:
4 2 -1
解釋:
4為最大值,2為中位數,-1為最小值。
樣例2
輸入:
4
-2 -1 3 4
輸出:
4 1 -2
解釋:
4為最大值,(-1 + 3) ÷ 2 = 1為中位數,-2為最小值。
首先是最大值和最小值,因為所給資料是有序的,所以最大值和最小值在所給資料的兩端,可直接取出,然後比較,得出最大值和最小值。
然後是中位數,中位數是按順序排列的一組資料中居於中間位置的數。假設資料個數為n,資料儲存在陣列arr中,當n為奇數時,中位數為arr[n/2],在c++中,整數除整數,所得的結果是用去尾法處理後的整數,所以索引是n/2,例如當n=3時,n/2=1;當n為偶數時,中位數為居於中間兩個數的平均值,即 (arr[n/2-1] + arr[n/2])/2,這時中位數可能是小數或整數,所以應用乙個浮點物件來儲存它。
輸出時,先輸出最大值,然後輸出中位數,最後輸出最小值。輸出中位數時,如果是整數應該按整數來輸出,如果是小數,輸出四捨五入保留1位小數的結果。
#include using namespace std;
int main()
//計算中位數
double mid = (arr[n/2-1]+arr[n/2])/2.0;
//輸出結果
if(arr[0] >= arr[n-1]){ //降序
if(n%2 == 0){
cout 只學過c++的同學可能一開始會將注意力放在輸出四捨五入保留1位小數的結果上,但對於解決此問題並不需要太多的操作,因為任何整數除以2,餘數只有0和0.5兩種情況。那對於一般的情況呢?
c++中如何輸出任意位數的小數,可以使用setprecision(),setprecision的中文意思為設定精度。setprecision()的使用示例如下圖:
setprecision()具體函式說明:
CCF認證201903 1小中大
201903 1小中大 吐槽一下 題目不是很難,但是用vc6.0會出現一些bug 推測就是這個ide的問題 問題如下 槽點如圖,都是按照整型輸出 1,竟然會出現兩個不同的值,真的困惑了我半天。演算法設計 題目分析 1 維護乙個num 100010 的陣列 2 按照整型輸入n個有序整數 3 根據頭尾確...
CCF 201903 1小中大 (100分)
本題看似簡單實則暗藏殺機,首先必須得完全理解題意 按從大到小的順序依次輸出最大值 中位數以及最小值,其中中位數若為整數則輸出為整數,若為分數則保留一位小數並輸出。這裡最大值以及最小值得輸出沒有什麼好說的,關鍵是中位數的輸出,建議使用c語言printf 的輸出方式,便於進行格式控制,嚴格遵循整數直接輸...
CSP認證 201903 1 小中大
問題鏈結 ccf201903 1。問題描述 輸入一組數,找出最大值,中位數和最小值並輸出 問題分析 簡單模擬問題,只需判斷中位數是否需要以保留一位小數的格式輸出,本解法是按照題意,先求出中位數,再對首位 末位和中位數進行排序 程式說明 1.輸入個數n和數字 2.判斷中位數是否需要取平均值 3.判斷中...