[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] 矩阵转换


关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章