题目出自 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] 矩阵转换