iT邦幫忙

0

[C++][APCS] 成績指標

題目出自 APCS 網站 > 試題範例 > 2016-03-05_實作題 > 第一題 成績指標
連結

解答僅供參考

解答:

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    int n;
    scanf("%d", &n);

    int score[n];
    for (int i = 0; i < n; i++)
    {
        scanf("%d", &score[i]);
    }

    //排序
    for (int i = 0; i < n - 1; i++)
    {
        for (int j = i + 1; j < n; j++)
        {
            if (score[i] > score[j])
            {
                score[i] = score[i] ^ score[j];
                score[j] = score[i] ^ score[j];
                score[i] = score[i] ^ score[j];
            }
        }
    }

    //找出最低及格分數
    int minPass = -1;
    for (int i = 0; i < n; i++)
    {
        if (score[i] >= 60)
        {
            minPass = score[i];
            break;
        }
    }

    //找出最高不及格分數
    int maxNoPass = -1;
    for (int i = n - 1; i >= 0; i--)
    {
        if (score[i] < 60)
        {
            maxNoPass = score[i];
            break;
        }
    }

    //印出解答
    for (int i = 0; i < n; i++)
    {
        printf("%d", score[i]);
        if (i < n - 1)
        {
            printf(" ");
        }
    }
    printf("\n");

    if (maxNoPass == -1)
    {
        printf("best case\n");
    }
    else
    {
        printf("%d\n", maxNoPass);
    }

    if (minPass == -1)
    {
        printf("worst case\n");
    }
    else
    {
        printf("%d\n", minPass);
    }

    system("pause");
    return 0;
}

說明:
一開始先簡單的將成績陣列由小到大排序,
排序過程中,有用到 XOR 運算,做位置的調換。

接著分別找出 最低及格分數最高不及格分數

最低及格分數的找法:
從陣列前端往後找,找到大於等於60分,就將分數儲存並離開迴圈。

最高不及格分數的找法:
從陣列末端往前找,找到小於60分,就將分數儲存並離開迴圈。

這裡有運用一個技巧,因為分數皆大於等於0,
所以先將 minPass 和 maxNoPass 設為 -1,
最後就可以用 -1 來判斷是否印出 worst case 或 best case。

相關文章:
[C++][APCS] 成績指標
[C++][APCS] 矩陣轉換


尚未有邦友留言

立即登入留言