题意及思路

  • 题意:找出数组中,超半数的数。
  • 思路:🙄foolish操作(见代码1),就是纯暴力法。😅推荐阅读代码2,很巧妙,若数组中有超半数的数时相同,排序后,则在中间位上的数一定是超半数的那个数。

代码1

#include <iostream>
#include <algorithm>

using namespace std;

int q[1005];

int main(){
    int n;
    cin >> n;
    for(int i=0;i<n;i++) cin >> q[i];
    sort(q,q+n);
    int it = n/2;
    bool f = true;
    for(int i=0;i<=it;i++){
        int j = i;
        f = true;
        while(j<=i+it){
            if(q[j]!=q[i]){
                f = false;
                break;
            }
            j++;
        }
        if(f){
            cout << q[i] << endl;
            break;
        }
    }
    return 0;
}

代码2

#include <algorithm>
#include <iostream>

using namespace std;
   
int main()
{
    int a[1000],n;
    cin >> n;
    for(int i = 1;i <= n;i++)
        cin >> a[i];
    sort(a+1,a+n+1);
    cout << a[n/2];
}