PAT (Basic Level) Practice (中文)1004 成绩排名 (20分)(C语言版)

    科技2022-08-26  107

    1004 成绩排名 (20分)

    读入 n(>0)名学生的姓名、学号、成绩,分别输出成绩最高和成绩最低学生的姓名和学号。

    输入格式:

    每个测试输入包含 1 个测试用例,格式为

    第 1 行:正整数 n 第 2 行:第 1 个学生的姓名 学号 成绩 第 3 行:第 2 个学生的姓名 学号 成绩 ... ... ... 第 n+1 行:第 n 个学生的姓名 学号 成绩

    其中姓名和学号均为不超过 10 个字符的字符串,成绩为 0 到 100 之间的一个整数,这里保证在一组测试用例中没有两个学生的成绩是相同的。

    输出格式:

    对每个测试用例输出 2 行,第 1 行是成绩最高学生的姓名和学号,第 2 行是成绩最低学生的姓名和学号,字符串间有 1 空格。

    输入样例:

    3 Joe Math990112 89 Mike CS991301 100 Mary EE990830 95

    输出样例:

    Mike CS991301 Joe Math990112

    代码:

      #include<stdio.h> #include <stdlib.h> int main(void) { /****************************************************************** 取出每个字符串的最后三位,从个位数判断,根据学号与分数之间有' '来判断哪里是分数的起始位置。 然后用max 、min记录最高分和最低分,用maxstr和minstr两个数组来记录所要输出的序列并且去除学号与分数间的空格。 *******************************************************************/ int max = 0, min = 100; int len = 0, i = 1; char maxstr[22] = "\0", minstr[22] = "\0"; int score = 0; int num = 0; char str[26] = "\0"; scanf("%d", &num); getchar(); while(num--) { gets(str); len = strlen(str); score = str[len-1] - '0'; //个位 if(str[len - 2] != ' ') //有十位 { score += (str[len - 2] - '0' ) * 10; i++; if(str[len - 3] != ' ') //有十位 { score += (str[len - 3] - '0' ) * 100; i++; } } if(score >= max) { max = score; strncpy(maxstr, str, len - i - 1); //去掉空格 maxstr[len - i - 1] = '\0'; //结尾 } if(score <= min) { min = score; strncpy(minstr, str, len - i - 1); //去掉空格 minstr[len - i - 1] = '\0'; //结尾 } i = 1; }; printf("%s\n", maxstr); printf("%s\n", minstr); return 0; }
    Processed: 0.014, SQL: 9