「PAT乙级真题解析」Basic Level 1042 字符统计 (问题分析+完整步骤+伪代码描述+提交通过代码)

题目中"出现最频繁"提示我们这是一道统计题+最值题。 统计数据是英文字母, 十分常规, 与之前我们提到的统计数据的题目一样存储数据然后查询数据即可。

#算法#c++#c语言

Table of Contents

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

PAT乙级BasicLevelPractice 1042

问题分析

题目中"出现最频繁"提示我们这是一道统计题+最值题。 统计数据是英文字母, 十分常规, 与之前我们提到的统计数据的题目一样存储数据然后查询数据即可。

完整描述步骤

  1. 获取字符串
  2. 初始化计数器
  3. 对于每一个字符: 将计数器中对应位置的计数值+1
  4. 初始化最频繁次数=0, 最频繁字符;
  5. 对于计数器中每一个字母以及其计数值:
    • 如果当前计数值大于最频繁次数:
      • 最频繁次数 更新为 当前计数值
      • 最频繁字母 更新为当前字母
  6. 输出最频繁字母

伪代码描述

  1. get input of string;
  2. init counter[256] = {0};
  3. for each char in string: counter[char] ++;
  4. init max_frequency = 0; max_frequency_alphabet;
  5. for char, frequency in counter: if frequency > max_frequency: max_frequency = frequency; max_frequency_alphabet = char; else if frequency == max_frequency and char < max_frequency_alphabet: max_frequency = frequency; max_frequency_alphabet = char;
  6. print(max_frequency_alphabet, max_frequency)

完整提交代码

/*
# 问题分析
题目中"出现最频繁"提示我们这是一道统计题+最值题。
统计数据是英文字母, 十分常规, 与之前我们提到的统计数据的题目一样存储数据然后查询数据即可。
 
# 完整描述步骤
1. 获取字符串
2. 初始化计数器
3. 对于每一个字符:
    将计数器中对应位置的计数值+1
4. 初始化最频繁次数=0, 最频繁字符;
5. 对于计数器中每一个字母以及其计数值:
    - 如果当前计数值大于最频繁次数:
        - 最频繁次数 更新为 当前计数值
        - 最频繁字母 更新为当前字母
6. 输出最频繁字母
 
# 伪代码描述
1. get input of string;
2. init counter[256] = {0};
3. for each char in string:
    counter[char] ++;
4. init max_frequency = 0; max_frequency_alphabet;
5. for char, frequency in counter:
    if frequency > max_frequency:
        max_frequency = frequency;
        max_frequency_alphabet = char;
    else if frequency == max_frequency and char < max_frequency_alphabet:
        max_frequency = frequency;
        max_frequency_alphabet = char;
6. print(max_frequency_alphabet, max_frequency)
 
*/
 
# include<stdio.h>
# include<ctype.h>
# define MAXLEN 1001
 
 
 
int main(){
    char content[MAXLEN];
    gets(content);
    
    int frequency[256] = {0};
    for (int i = 0; content[i]; i++){
        frequency[tolower(content[i])]++;
    }
 
    int max_frequency = -1;
    char max_frequency_alphabet = ' ';
    
    int start_index = (int)'a';
    int end_index = (int)'z';
    for (int i = start_index; i <= end_index; i++){
        if (frequency[i] > max_frequency){
            max_frequency = frequency[i];
            max_frequency_alphabet = (char)i;
        }
    }
    
    printf("%c %d", max_frequency_alphabet, max_frequency);
    return 0;
}