1. 程式人生 > 其它 >「csp模擬試題 201903-1」小中大 C/C++ 100分

「csp模擬試題 201903-1」小中大 C/C++ 100分

技術標籤:csp筆記C++c++演算法c語言

目錄

  • 題目
  • 輸入輸出樣例
  • 題解思路
  • 題解原始碼(c/c++)

題目 :小中大

【問題描述】

老師給了你 n 個整陣列成的測量資料,保證有序(可能為升序或降序),可能存在重複的資料。請統計出這組測量資料中的最大值、中位數以及最小值,並按照從大到小.的順序輸出這三個數。.

【輸入格式】

從標準輸入讀入資料。

第一行輸入一個整數 n,在第二行中存在 n 個有序的整數,表示測量資料,可能為升序或降序排列,可能存在連續多個整數相等,整數與整數之間使用空格隔開。

【輸出格式】

輸出到標準輸出。

包含一行,包括最大值、中位數以及最小值共三個數,並按照從大到小的順序輸出。資料與資料之間使用空格隔開。對於整數請直接輸出整數,對於可能出現的分數, 請輸出四捨五入保留 1 位小數的結果。

輸入輸出樣例

  • 輸入樣例1
3
-1 2 4
  • 輸出樣例1
4 2 -1

樣例 1 解釋

4 為最大值,2 為中位數,-1 為最小值。

  • 輸入樣例2
4
-2 -1 3 4
  • 輸出樣例2
4 1 -2

樣例 2 解釋

4 為最大值,(-1+3)÷2=為中位數,-2 為最小值。

【子任務】

在這裡插入圖片描述

題解思路

水題,直接判斷即可。注意中位數的求法即可。中位數可能為整數或一位的小數。

題解(c/c++)

#include<bits/stdc++.h>
using namespace std;
int main() {
    int n;
    cin>>n;
    int
max,min; int a[n+1]; for (int i=0;i<n;i++){ cin>>a[i]; } max=a[0]>a[n-1]? a[0]:a[n-1]; min=a[0]>a[n-1]? a[n-1]:a[0]; cout<<max<<" "; if(n%2){ cout<<a[n/2]<<" "; } else { if(a[n/2-1]%2==a[
n/2]%2){ cout<<(a[n/2-1]+a[n/2])/2<<" "; } else { cout<<(double)(a[n/2-1]+a[n/2])/2<<" "; } } cout<<min; return 0; }