「PAT乙级真题解析」Basic Level 1032 挖掘机技术哪家强 (问题分析+完整步骤+伪代码描述+提交通过代码)

题设给定了一组数据, 要求输出某个指定的最大值,这是一道求最值的问题。 最值问题的基本思路是:遍历 + 记录并更新最值。 在这道题中, 我们要遍历的信息是参赛者信息, 包括所代表的学校编号和参赛成绩。 要求的最值是总得分最高的学校编号和总分。(这说明我们要记录并更新的数据是学校编号和对应总分)

#算法#数据结构#需求分析#pat考试#c语言

Table of Contents

乙级的题目训练主要用来熟悉编程语言的语法和形成良好的编码习惯和编码规范。从小白开始逐步掌握用编程解决问题。

PAT乙级BasicLevelPractice 1032

问题分析

题设给定了一组数据, 要求输出某个指定的最大值,这是一道求最值的问题。 最值问题的基本思路是:遍历 + 记录并更新最值。 在这道题中, 我们要遍历的信息是参赛者信息, 包括所代表的学校编号和参赛成绩。 要求的最值是总得分最高的学校编号和总分。(这说明我们要记录并更新的数据是学校编号和对应总分)

完整描述步骤

  1. 获取参数人数
  2. 初始化总分最高的学校编号和总分.
  3. 对于每个参赛者信息:
    • 将成绩加到对应学校的总分记录中;
    • 比较该学校的总分与当前最高总分的大小;
    • 如果总分比当前最高总分高, 则更新学校编号和总分
  4. 输出记录的最高总分的学校编号和总分

伪代码描述

  1. get input: case_amount;

  2. init recorder:

    • total_scores[100001] = {0, 0, ..., 0}
    • max_score = -1;
    • max_score_num = -1;
  3. for (i = 0; i < case_amount; i++): get player infomation: school_num, person_score; total_scores[school_num] += person_score; if total_scores[school_num] > max_score: max_score = total_scores[school_num]; max_score_num = school_num;

  4. print(max_score_num, " ", max_score)

完整提交代码

/*
# 问题分析
题设给定了一组数据, 要求输出某个指定的最大值,这是一道求最值的问题。
最值问题的基本思路是:遍历 + 记录并更新最值。
在这道题中, 我们要遍历的信息是参赛者信息, 包括所代表的学校编号和参赛成绩。
要求的最值是总得分最高的学校编号和总分。(这说明我们要记录并更新的数据是学校编号和对应总分)
 
# 完整描述步骤
1. 获取参数人数
2. 初始化总分最高的学校编号和总分.
3. 对于每个参赛者信息:
    - 将成绩加到对应学校的总分记录中;
    - 比较该学校的总分与当前最高总分的大小;
    - 如果总分比当前最高总分高, 则更新学校编号和总分
4. 输出记录的最高总分的学校编号和总分
 
# 伪代码描述
1. get input: case_amount;
2. init recorder:
    - total_scores[100001] = {0, 0, ..., 0}
    - max_score = -1;
    - max_score_num = -1;
3. for (i = 0; i < case_amount; i++):
    get player infomation: school_num, person_score;
    total_scores[school_num] += person_score;
    if total_scores[school_num] > max_score:
        max_score = total_scores[school_num];
        max_score_num = school_num;
 
4. print(max_score_num, " ", max_score)
*/
 
# define MAXNUM 100001
 
 
int main(){
    int case_amount;
    scanf("%d\n", &case_amount);
    int total_scores[MAXNUM] = {0};
 
    int num, score;
    int max_score = -1;
    int max_score_num = -1;
    for (int i = 0; i < case_amount; i++){
        scanf("%d %d\n", &num, &score);
        total_scores[num] += score;
        if (total_scores[num] > max_score)
        {
            max_score = total_scores[num];
            max_score_num = num;
        }
    }
    
    printf("%d %d\n", max_score_num, max_score);
    
    return 0;
}
「PAT乙级真题解析」Basic Level 1032 挖掘机技术哪家强 (问题分析+完整步骤+伪代码描述+提交通过代码) | 生活糖果