#31291: 用count會比較簡單(CPP)


jason096727@gmail.com (Jason Ho)

學校 : 高雄市苓雅區福東國民小學
編號 : 189939
來源 : [150.116.71.76]
最後登入時間 :
2023-07-15 21:32:51
b374. [福州19中]众数 | From: [150.116.71.227] | 發表日期 : 2022-07-22 18:30

#include <bits/stdc++.h>

using namespace std;

int main()
{
    int n;
    while (cin >> n){
        int x[n], max=0, num;
        for (int i=0; i<n; i++){
            cin >> x[i];
        }
        sort (x, x+n);//小到大輸出
        for (int j=0; j<n; j++){
            int a=count (x, x+n, x[j]);
            if (a>max){
                max = a;
                num = x[j];
            }
        }//找出第一個眾數
        cout << num << " " << max << '\n';
        for (int k=0; k<n; k++){
            int b=count (x, x+n, x[k]);
            if (b==max && x[k]!=num){
                cout << x[k] << " " << b << '\n';
                x[k] = 0;// 避免重複輸出
            }
        }//找出其他和第一眾數同樣多的眾數
    }

    return 0;
}

 
#31296: Re: 用count會比較簡單(CPP)


krameri120 (科科)

學校 : 國立臺南高級工業職業學校
編號 : 102318
來源 : [36.237.212.239]
最後登入時間 :
2024-04-01 14:20:14
b374. [福州19中]众数 | From: [106.64.137.183] | 發表日期 : 2022-07-23 09:17

#include

using namespace std;

int main()
{
    int n;
    while (cin >> n){
        int x[n], max=0, num;
        for (int i=0; i
            cin >> x[i];
        }
        sort (x, x+n);//小到大輸出
        for (int j=0; j
            int a=count (x, x+n, x[j]);
            if (a>max){
                max = a;
                num = x[j];
            }
        }//找出第一個眾數
        cout << num << " " << max << '\n';
        for (int k=0; k
            int b=count (x, x+n, x[k]);
            if (b==max && x[k]!=num){
                cout << x[k] << " " << b << '\n';
                x[k] = 0;// 避免重複輸出
            }
        }//找出其他和第一眾數同樣多的眾數
    }

    return 0;
}


我記得這題用建表比較快,AC (2ms, 228KB)

int appear[30000]={0};

建一個陣列,每個數字出現,比如5,appear[5]+=1;
掃完同時記錄max出現次數,在掃一次印出appear[x]==max的即可
sort有時會太花費時間了~

 
ZeroJudge Forum