【CCF】中間數
- 2019 年 11 月 8 日
- 筆記
版權聲明:本文為博主原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接和本聲明。
本文鏈接:https://blog.csdn.net/weixin_42449444/article/details/84933997
試題編號: |
201612-1 |
---|---|
試題名稱: |
中間數 |
時間限制: |
1.0s |
內存限制: |
256.0MB |
問題描述: |
問題描述 在一個整數序列a1, a2, …, an中,如果存在某個數,大於它的整數數量等於小於它的整數數量,則稱其為中間數。在一個序列中,可能存在多個下標不相同的中間數,這些中間數的值是相同的。 給定一個整數序列,請找出這個整數序列的中間數的值。 輸入格式 輸入的第一行包含了一個整數n,表示整數序列中數的個數。 第二行包含n個正整數,依次表示a1, a2, …, an。 輸出格式 如果約定序列的中間數存在,則輸出中間數的值,否則輸出-1表示不存在中間數。 樣例輸入 6 2 6 5 6 3 5 樣例輸出 5 樣例說明 比5小的數有2個,比5大的數也有2個。 樣例輸入 4 3 4 6 7 樣例輸出 -1 樣例說明 在序列中的4個數都不滿足中間數的定義。 樣例輸入 5 3 4 6 6 7 樣例輸出 -1 樣例說明 在序列中的5個數都不滿足中間數的定義。 評測用例規模與約定 對於所有評測用例,1 ≤ n ≤ 1000,1 ≤ ai ≤ 1000。 |
解題思路:
尋找中間數前先對整數序列進行排序,然後無腦for循環來暴力破解就行了。第一個for循環是用來找中間數的,第二個for循環是用來判斷這個序列中比第一個for循環中假定的那個中間數大的和比它小的是否相等,若相等則輸出中間數並把flag標記為true,flag用來判斷是否找到了中間數,若無腦for循環結束之後都沒有找到中間數則輸出-1。
100分代碼:
#include <bits/stdc++.h> using namespace std; int main() { int n; //整數序列中數字的個數 cin >> n; int a[n]; for (int i = 0; i < n; i++) { cin >> a[i]; } sort(a,a+n); //對整數序列進行排序 bool flag = false; //是否找到了中間數 //無腦for循環暴力破解 for (int i = 0; i < n; i++) //這個for循環是用來找中間數的 { int count_low = 0; //比中間數小的數 int count_up = 0; //比中間數大的數 for (int j = 0; j < n; j++) //這個for循環是用來看整數序列中有多少比它大有多少比它小 { if(a[j]>a[i]) { count_up++; } if(a[j]<a[i]) { count_low++; } } if(count_low == count_up) { flag = true; cout << a[i] << endl; break; } } if(!flag) //若沒有找到中間數則輸出-1 { cout << -1 << endl; } return 0; }