「PAT乙级真题解析」Basic Level 1043 输出PATest (问题分析+完整步骤+伪代码描述+提交通过代码)

题目要求按照以"PATest"的顺序, 对给定字符串进行重新输出, 输出的"PATest"各个字母的数量需要与原字符串中的数目相同. 忽略其他字符。 通过题设的描述我们可以知道这是一道统计题, 需要统计的是"PATest"各个字符在原字符串中的数目 然后输出时只要检查统计值是否大于0, 如果大于0则输出并将统计值-1即可。 统计题如何进行数据统计和存储之前的题目已经多次提及, 这里不再赘述。

#算法

Table of Contents

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

PAT乙级BasicLevelPractice 1043

问题分析

题目要求按照以"PATest"的顺序, 对给定字符串进行重新输出, 输出的"PATest"各个字母的数量需要与原字符串中的数目相同. 忽略其他字符。 通过题设的描述我们可以知道这是一道统计题, 需要统计的是"PATest"各个字符在原字符串中的数目 然后输出时只要检查统计值是否大于0, 如果大于0则输出并将统计值-1即可。 统计题如何进行数据统计和存储之前的题目已经多次提及, 这里不再赘述。

完整描述步骤

  1. 获取输入字符串
  2. 初始化计数器
  3. 统计"PATest"各个字符出现的次数
  4. 按照"PATest"的顺序检查字符在计数器中的值:
    • 如果计数值大于0, 则:
      • 输出该字符
      • 计数值 - 1

伪代码描述

  1. get input of string:
  2. init counter[7] = {0}; counter_index[7] = "PATest"
  3. for char in string: if char in counter_index: counter[counter_index[char]]++;
  4. for index in counter_index: if counter[index] > 0: - print(index) - counter[index] - 1

完整提交代码

/*
# 问题分析
题目要求按照以"PATest"的顺序, 对给定字符串进行重新输出, 
输出的"PATest"各个字母的数量需要与原字符串中的数目相同. 忽略其他字符。
通过题设的描述我们可以知道这是一道统计题, 需要统计的是"PATest"各个字符在原字符串中的数目
然后输出时只要检查统计值是否大于0, 如果大于0则输出并将统计值-1即可。
统计题如何进行数据统计和存储之前的题目已经多次提及, 这里不再赘述。
 
# 完整描述步骤
1. 获取输入字符串
2. 初始化计数器
3. 统计"PATest"各个字符出现的次数
4. 按照"PATest"的顺序检查字符在计数器中的值:
    - 如果计数值大于0, 则:
        - 输出该字符
        - 计数值 - 1
 
# 伪代码描述
1. get input of string:
2. init counter[7] = {0};
    counter_index[7] = "PATest"
3. for char in string:
    if char in counter_index:
        counter[counter_index[char]]++;
4. for index in counter_index:
    if counter[index] > 0:
        - print(index)
        - counter[index] - 1
*/
 
 
# include<stdio.h>
 
int main(){
    char content[10001];
    scanf("%s", content);
 
    char target_chars[7] = "PATest";
    
    int frequency[6] = {0};
    for (int i = 0; content[i]; i++){
        for (int j = 0; j < 6; j++){
            if (content[i] == target_chars[j]){
                frequency[j]++;
                break;
            }
        }
    }
 
    int max_frequency = -1;
    for (int i = 0; i < 6; i++){
        if (frequency[i] > max_frequency) max_frequency = frequency[i];
    }
    
    for (int i = 0; i < max_frequency; i++){
        for (int j = 0; j < 6; j++){
            if (frequency[j] > 0){
                printf("%c", target_chars[j]);
                frequency[j]--;
            }
        }
    }
    
    return 0;
}
「PAT乙级真题解析」Basic Level 1043 输出PATest (问题分析+完整步骤+伪代码描述+提交通过代码) | 生活糖果