C語言分數統計

寫在前面:這裏是小王成長日誌,一名在校大學生,想在學習之餘將自己的學習筆記分享出來,記錄自己的成長軌跡,幫助可能需要的人。歡迎關注與留言。

題目:

題目鏈接:https://www.dotcpp.com/oj/problem1500.html

題目 1500: [藍橋杯][算法提高VIP]分數統計

時間限制: 1Sec 內存限制: 128MB 提交: 1541 解決: 709

題目描述
給定一個百分制成績T,將其劃分爲如下五個等級之一:
90100爲A,8089爲B,7079爲C,6069爲D,0~59爲E
現有若干百分制成績(成績個數不超過1000個),請你統計五個等級段的人數,並找出人數最多的那個等級段,按照從大到小的順序輸出該段中所有人成績(保證人數最多的等級只有一個)。
輸入
第一行是成績的個數 n
第二行是學生的成績,若干0~100的正整數,用空格隔開

輸出
第一行爲5個正整數,分別表示A,B,C,D,E五個等級段的人數
第二行一個正整數,表示人數最多的等級段中人數
接下來一行若干個用空格隔開的正整數,表示人數最多的那個等級中所有人的分數,按從大到小的順序輸出。
樣例輸入
10
100 80 85 77 55 61 82 90 71 60
樣例輸出
2 3 2 2 1
3
85 82 80

C語言解法

思路:

1.一個很正常的輸入,根據輸入的n創建5個數組來存儲相應等級的分數,並在讀取輸入的時候就進行判斷以將數據放進相應等級的數組
2.輸入完成,這時已經有了5個數組並且我們知道其長度

  • 這時我們分爲兩步,1是找出這五個長度中的最大值,這裏我直接用了暴力的if判斷,應有更簡單的方法
  • 對長度最大的數組進行排序並輸出

注意:1.注意輸出格式.2.排序並輸出數組的部分明顯是重複的,可以抽象成一個函數以便調用


#include <stdio.h>

int main()
{
    int n, temp = 0;
    scanf("%d", &n);
    int a[n], b[n], c[n], d[n], e[n];
    int ac = 0, bc = 0, cc = 0, dc = 0, ec = 0;//ac a count 數組a的計數器
    for (int i = 0; i < n; i++)
    {
        scanf("%d", &temp);
        if (temp >= 90)
            a[ac++] = temp;
        else if (temp >= 80)
            b[bc++] = temp;
        else if (temp >= 70)
            c[cc++] = temp;
        else if (temp >= 60)
            d[dc++] = temp;
        else
            e[ec++] = temp;
    }
    printf("%d %d %d %d %d\n", ac, bc, cc, dc, ec);

    //找出5個數最大值
    if (ac > bc && ac > cc && ac > dc && ac > ec)
        fun(a, ac);
    else if (bc > ac && bc > cc && bc > dc && bc > ec)
        fun(b, bc);
    else if (cc > ac && cc > bc && cc > dc && cc > ec)
        fun(c, cc);
    else if (dc > ac && dc > bc && dc > cc && dc > ec)
        fun(d, dc);
    else
        fun(e, ec);
}

void fun(int a[], int len)
{
    //選擇排序 從大到小
    int i, j, max = 0, min = 0, temp;
    for (i = 0; i < len; i++)
    {
        max = i;
        for (j = i + 1; j < len; j++)
            if (a[max] < a[j])
                max = j;

        if (max != i)
        {
            temp = a[max];
            a[max]=a[i];
            a[i]=temp;
        }
    }

    //打印結果
    printf("%d\n", len);
    printf("%d", a[0]);
    for (i = 1; i < len; i++)
        printf(" %d", a[i]);
}

都看到這裏了,各位哥哥姐姐叔叔阿姨給小王點個贊 關個注 留個言吧,和小王一起成長吧,你們的關注是對我最大的支持。
有事沒事進來看看吧 : 小王的博客目錄索引
C語言專欄看這 : C語言學習專欄
C語言題目專欄看這 : C語言中文網題目專欄


如果以上內容有任何不準確或遺漏之處,或者你有更好的意見,就在下面留個言讓我知道吧-我會盡我所能來回答。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章