「PAT乙级真题解析」Basic Level 1108 String复读机 (问题分析+完整步骤+伪代码描述+提交通过代码)
admin
2024-03-16 04:50:18

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

PAT (Basic Level) Practice 1108 String复读机

问题分析

  • 题设要求将给定的字符串按照"String"的顺序输出, 并且忽略"String"之外的字符。
  • 同时说明了"String"中6个字符出现的频次不保证相同, 输出时若某种字符已输出完毕, 则跳过该字符.
  • 所以, 我们要做的是统计"String"中各个字符在给定的字符串中出现的次数作为要输出的个数,
  • 然后按照"String"的顺序循环检查每一个字符当前的剩余个数, 如果不等于0, 则输出并将次数减一,
  • 直到这6个字符的剩余个数都为0为止。

完整描述步骤

  1. 获取输入: 给定字符串
  2. 初始化统计器:
    • 各个字符出现的次数 = {
      ‘S’: 0,
      ‘t’: 0,
      ‘r’: 0,
      ‘i’: 0,
      ‘n’: 0,
      ‘g’: 0,
      }
  3. 对于给定字符串的每一个字符:
    • 如果当前字符是"String"中的某一个:
      • 将计数器中当前字符串的频次 + 1
  4. 初始化标记位记录器:
    • 当前循环进行过输出
  5. 循环执行以下操作:
    • 设置 当前循环进行过输出 = False
    • 对于"String"中的各个字符:
      • 检查字符在计数器中的值:
        • 如果值大于1:
          • 输出该字符
          • 将计数器的对应值 - 1
          • 当前循环进行过输出 = True
    • 如果 当前循环进行过输出 = False: (说明全部的字符计数器值都等于0)
      • 跳出循环

伪代码描述

  1. get input: content
  2. init recorder:
    • counter = {0}
  3. for char in content:
    • if char in “String”:
      • counter[char] ++;
  4. init flag: output
  5. while True:
    • output = False
    • for char in “String”:
      • if counter[char] > 0:
        • print(char);
        • counter[char] --;
        • output = True
    • if output == False:
      • break;

完整提交代码

/*
# 问题分析
题设要求将给定的字符串按照"String"的顺序输出, 并且忽略"String"之外的字符。
同时说明了"String"中6个字符出现的频次不保证相同, 输出时若某种字符已输出完毕, 则跳过该字符.
所以, 我们要做的是统计"String"中各个字符在给定的字符串中出现的次数作为要输出的个数,
然后按照"String"的顺序循环检查每一个字符当前的剩余个数, 如果不等于0, 则输出并将次数减一,
直到这6个字符的剩余个数都为0为止。# 完整描述步骤
1. 获取输入: 给定字符串
2. 初始化统计器:- 各个字符出现的次数 = {'S': 0,'t': 0,'r': 0,'i': 0,'n': 0,'g': 0,}
3. 对于给定字符串的每一个字符:- 如果当前字符是"String"中的某一个:- 将计数器中当前字符串的频次 + 1
4. 初始化标记位记录器:- 当前循环进行过输出
5. 循环执行以下操作:- 设置 当前循环进行过输出 = False- 对于"String"中的各个字符:- 检查字符在计数器中的值:- 如果值大于1:- 输出该字符- 将计数器的对应值 - 1- 当前循环进行过输出 = True- 如果 当前循环进行过输出 = False: (说明全部的字符计数器值都等于0)- 跳出循环# 伪代码描述
1. get input: content
2. init recorder:- counter = {0}
3. for char in content:- if char in "String":- counter[char] ++;
4. init flag: output
5. while True:- output = False- for char in "String":- if counter[char] > 0:- print(char);- counter[char] --;- output = True- if output == False:- break;*/# includeint main(){int counter[256] = {0};char content[10010];scanf("%s", content);for (int i = 0; content[i]; i++){if (content[i] == 'S' || content[i] == 't' || content[i] == 'r' || content[i] == 'i' || content[i] == 'n' || content[i] == 'g'){counter[content[i]]++;}}char target[7] = "String";while (1){int output = 0;for (int i = 0; i < 6; i++){if (counter[target[i]] > 0){printf("%c", target[i]);counter[target[i]]--;output = 1;}}if (output == 0) break;}return 0;
}

相关内容

热门资讯

如果王楚钦是国乒一哥,那么樊振... 马龙一句“有王楚钦在我们都很心定”的认可还在回响,樊振东在德国杯夺冠并捧起MVP奖杯的照片已经传遍全...
原创 美... 当特朗普在社交平台上敲下已抓获马杜罗这一行字时,曾自诩为自由捍卫者的美国,已彻底揭开了道德的面具,露...
最新或2023(历届)天津各大... 最新或2023(历届)天津各大学理科税收学专业排名及录取分数线天津最新或2023(历届)各高校理科税...
最新或2023(历届)广东各大... 广东最新或2023(历届)各高校理科财务管理专业录取分数线排名专业院校平均分最高分省市文理年份批次财...
新疆区最新或2023(历届)大... 新疆维吾尔自治区招生委员会公布了《自治区最新或2023(历届)普通高校招生各批次最低投档控制分数线》...