【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;  }