「PAT乙级真题解析」Basic Level 1047 编程团体赛 (问题分析+完整步骤+伪代码描述+提交通过代码)

题目要求给出冠军队伍的编号和总成绩。这是一道统计题(统计各队伍分数)/最值题(分数最高) 这类题目已经出现多次, 主要思路为: 统计各个队伍分数后对统计结果进行比较求最值。

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

Table of Contents

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

PAT乙级BasicLevelPractice 1047

问题分析

题目要求给出冠军队伍的编号和总成绩。这是一道统计题(统计各队伍分数)/最值题(分数最高) 这类题目已经出现多次, 主要思路为: 统计各个队伍分数后对统计结果进行比较求最值。

完整描述步骤

  1. 获取输入: 各个队伍的信息(队伍编号、队员编号、成绩)
  2. 对于每一个队伍的数据:
    • 将队员的成绩加到对应队伍的总分中
    • 检查当前队伍加分后的成绩与记录的最高分的大小情况
      • 如果大于当前记录的最高分, 则更新最高分和队伍编号
  3. 输出最高分队伍编号和成绩

伪代码描述

  1. get input: player_amount, player_info(team_num, player_num, player_score)
  2. init counter:
    • team_scores[10001] = {0}
    • max_score_team_num = -1
    • max_score_team_score = 0
  3. for each player info:
    • team_scores[team_num] += player_score
    • if team_scores[team_num] > max_score_team_score:
      • max_score_team_score = team_scores[team_num]
      • max_score_team_num = team_num
  4. print(max_score_team_num, max_score_team_score)

完整提交代码

/*
# 问题分析
题目要求给出冠军队伍的编号和总成绩。这是一道统计题(统计各队伍分数)/最值题(分数最高)
这类题目已经出现多次, 主要思路为: 统计各个队伍分数后对统计结果进行比较求最值。
 
# 完整描述步骤
1. 获取输入: 各个队伍的信息(队伍编号、队员编号、成绩)
2. 对于每一个队伍的数据:
    - 将队员的成绩加到对应队伍的总分中
    - 检查当前队伍加分后的成绩与记录的最高分的大小情况
        - 如果大于当前记录的最高分, 则更新最高分和队伍编号
3. 输出最高分队伍编号和成绩
 
# 伪代码描述
1. get input: player_amount, player_info(team_num, player_num, player_score)
2. init counter: 
    - team_scores[10001] = {0}
    - max_score_team_num = -1
    - max_score_team_score = 0
3. for each player info:
    - team_scores[team_num] += player_score
    - if team_scores[team_num] > max_score_team_score:
        - max_score_team_score = team_scores[team_num]
        - max_score_team_num = team_num
4. print(max_score_team_num, max_score_team_score)
*/
 
# include<stdio.h>
 
int main() {
  int player_amount;
  scanf("%d", &player_amount);
  int team_scores[1001] = {0};
 
  int team_num, player_num, player_score;
  int max_score_team_num = 0, max_score_team_score = 0;
  for (int i = 0; i < player_amount; i++) {
    scanf("%d-%d %d", &team_num, &player_num, &player_score);
    team_scores[team_num] += player_score;
    if (team_scores[team_num] > max_score_team_score) {
      max_score_team_score = team_scores[team_num];
      max_score_team_num = team_num;
    }
  }
 
  printf("%d %d", max_score_team_num, max_score_team_score);
  return 0;
}
「PAT乙级真题解析」Basic Level 1047 编程团体赛 (问题分析+完整步骤+伪代码描述+提交通过代码) | 生活糖果