1. 程式人生 > >實驗7-1-11 求整數序列中出現次數最多的數 (15 分)(結構陣列排序)

實驗7-1-11 求整數序列中出現次數最多的數 (15 分)(結構陣列排序)

浙大版《C語言程式設計實驗與習題指導(第3版)》題目集

實驗7-1-11 求整數序列中出現次數最多的數 (15 分)

本題要求統計一個整型序列中出現次數最多的整數及其出現次數。

輸入格式:

輸入在一行中給出序列中整數個數N(0<N≤1000),以及N個整數。數字間以空格分隔。

輸出格式:

在一行中輸出出現次數最多的整數及其出現次數,數字間以空格分隔。題目保證這樣的數字是唯一的。

輸入樣例:

10 3 2 -1 5 3 4 3 0 3 2

輸出樣例:

3 4

我的程式碼

1.在結構陣列中找到frequency最大結構的直接輸出
#include <stdio.h>

struct a{
    int
number; int frequency; }; int main(){ int n; scanf("%d", &n); int input[n]; for(int i = 0; i < n; i++){ scanf("%d", &input[i]); } struct a num[n]; int j = 0, exist = 0; //j是結構中數字的個數,exist記錄陣列中的數字是否出現過 for(int i = 0; i < n; i++) { //如果存在,就在次數上加1
for(int k = 0; k < j; k++) { if(input[i] == num[k].number) { num[k].frequency += 1; exist = 1; } } //如果不存在,就把這個數字加入結構,並初始化次數為1 if(exist == 0) { num[j].number = input[i]; num[
j].frequency = 1; j ++; } exist = 0; } //直接尋找結構陣列中frequency最大的那個結構 int mfn = num[0].frequency, h = 0;//mfn記錄最大的次數,f記錄這個數字在結構中的下標 for(int i = 0; i < j; i++){ if(mfn < num[i].frequency){ mfn = num[i].frequency; h = i; } } printf("%d %d\n", num[h].number, num[h].frequency); }
2.對結構陣列降序排序,然後輸出第一個
#include <stdio.h>

struct a{
    int number;
    int frequency;
};

//按照frequency降序排序
void bubble(struct a *p,int n){
    struct a temp;
    for(int i = 1; i < n; i++){
        for(int j = 0; j < n-1; j++){
            if((p[j].frequency) < (p[j+1].frequency)){
                temp = p[j];
                p[j] = p[j+1];
                p[j+1] = temp;
            }
        }
    }
}

int main(){
    int n;
    scanf("%d", &n);
    int input[n];
    for(int i = 0; i < n; i++){
        scanf("%d", &input[i]);
    }
    
    struct a num[n];
    int j = 0, exist = 0; //j是結構中數字的個數,exist記錄陣列中的數字是否出現過
    for(int i = 0; i < n; i++)
    {
        //如果存在,就在次數上加1
        for(int k = 0; k < j; k++)
        {
            if(input[i] == num[k].number)
            {
                num[k].frequency += 1;
                exist = 1;
            }
        }
        //如果不存在,就把這個數字加入結構,並初始化次數為1
        if(exist == 0)
        {
            num[j].number = input[i];
            num[j].frequency = 1;
            j ++;
        }
        exist = 0;
    }
    //進行排序
    bubble(num, j);
    //排序後結構中的第一個就是frequency最大的
    printf("%d %d\n", num[0].number, num[0].frequency);
}

這道題在教材上出現在學習結構之前,不知道有沒有不用結構的辦法