「PAT乙级真题解析」Basic Level 1092 最好吃的月饼 (问题分析+完整步骤+伪代码描述+提交通过代码)

题设要求统计各种月饼在各个城市的销量总和, 然后输出销量最高的月饼的最大销量和对应的种类编号。 如果销量并列第一, 按照编号递增顺序输出。 这意味着我们需要先统计出各种月饼的总销量,然后比较得出最大的销量, 然后从编号由小到大的顺序, 输出销量等于最大销量的种类编号。

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

Table of Contents

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

PAT (Basic Level) Practice 1092 最好吃的月饼

问题分析

题设要求统计各种月饼在各个城市的销量总和, 然后输出销量最高的月饼的最大销量和对应的种类编号。 如果销量并列第一, 按照编号递增顺序输出。 这意味着我们需要先统计出各种月饼的总销量,然后比较得出最大的销量, 然后从编号由小到大的顺序, 输出销量等于最大销量的种类编号。

完整描述步骤

  1. 获取输入: 月饼种类数, 参与的城市数目
  2. 初始化计数器:
    • 各种类月饼的总销量 = {0}
    • 最大总销量 = 0
  3. 对于每一个城市:
    • 获取输入: 各种类月饼的销量数据
    • 对于每一种月饼以及对应的销量:
      • 各种类月饼的总销量[月饼种类编号] += 销量
      • 如果当前月饼的总销量大于计数器中"最大总销量":
        • 最大总销量 = 各种类月饼的总销量[月饼种类编号]
  4. 输出最大总销量
  5. 从月饼编号从小到大检查:
    • 如果各种类月饼的总销量[月饼种类编号] 等于 最大总销量:
      • 输出月饼编号

伪代码描述

  1. get input: category_amount, city_amout;

  2. init counter:

    • sales[1000] = {0};
    • max_sale_amount = -1
  3. for each city:

    • get input: sales of each category of mooncake
    • for each category of mooncake:
      • sales[category] += sale_amount
      • if sales[category] > max_sale_amount:
        • max_sale_amount = sales[category]
  4. print(max_sale_amount)

  5. for each category of mooncake:

    • if sales[category] == max_sale_amount:
      • print(category)

完整提交代码

/*
# 问题分析
题设要求统计各种月饼在各个城市的销量总和, 然后输出销量最高的月饼的最大销量和对应的种类编号。
如果销量并列第一, 按照编号递增顺序输出。
这意味着我们需要先统计出各种月饼的总销量,然后比较得出最大的销量, 然后从编号由小到大的顺序, 输出销量等于最大销量的种类编号。
 
# 完整描述步骤
1. 获取输入: 月饼种类数, 参与的城市数目
2. 初始化计数器:
    - 各种类月饼的总销量 = {0}
    - 最大总销量 = 0
3. 对于每一个城市:
    - 获取输入: 各种类月饼的销量数据
    - 对于每一种月饼以及对应的销量:
        - 各种类月饼的总销量[月饼种类编号] += 销量
        - 如果当前月饼的总销量大于计数器中"最大总销量":
            - 最大总销量 = 各种类月饼的总销量[月饼种类编号]
4. 输出最大总销量
5. 从月饼编号从小到大检查:
    - 如果各种类月饼的总销量[月饼种类编号] 等于 最大总销量:
        - 输出月饼编号
 
# 伪代码描述
1. get input: category_amount, city_amout;
2. init counter:
    - sales[1000] = {0};
    - max_sale_amount = -1
    
3. for each city:
    - get input: sales of each category of mooncake
    - for each category of mooncake:
        - sales[category] += sale_amount
        - if sales[category] > max_sale_amount:
            - max_sale_amount = sales[category]
4. print(max_sale_amount)
5. for each category of mooncake:
    - if sales[category] == max_sale_amount:
        - print(category)
*/
 
 
# include<stdio.h>
 
int total_sales[1000] = {0};
 
int main(){
    int category_amount, city_amount;
    scanf("%d %d", &category_amount, &city_amount);
    
    int sale;
    for (int city_idx = 0; city_idx < city_amount; city_idx++){
        for (int category_idx = 0; category_idx < category_amount; category_idx++){
            scanf("%d", &sale);
            total_sales[category_idx] += sale;
        }
    }
    
    int max_sale = -1, max_sale_amount = 1;
    for (int i = 0; i < category_amount; i++){
        if (total_sales[i] > max_sale){
            max_sale = total_sales[i];
            max_sale_amount = 1;
        } else if (total_sales[i] == max_sale){
            max_sale_amount++;
        }
    }
    
    printf("%d\n", max_sale);
    for (int i = 0; i < category_amount; i++){
        if (total_sales[i] == max_sale){
            printf("%d", i+1);
            max_sale_amount--;
            if (max_sale_amount != 0){
                printf(" ");
            }
        }
    }
    
    return 0;
}
「PAT乙级真题解析」Basic Level 1092 最好吃的月饼 (问题分析+完整步骤+伪代码描述+提交通过代码) | 生活糖果