【PTA】L1-059 敲笨钟(C++)

这篇具有很好参考价值的文章主要介绍了【PTA】L1-059 敲笨钟(C++)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

ptal1-059 敲笨钟,c++,开发语言

题目链接:L1-059 敲笨钟 - 团体程序设计天梯赛-练习集 (pintia.cn) 

目录:

题目要求: 

输入格式:

输出格式:

输入样例:

输出样例:

思路: 

代码:

测试结果:


题目要求: 

微博上有个自称“大笨钟V”的家伙,每天敲钟催促码农们爱惜身体早点睡觉。为了增加敲钟的趣味性,还会糟改几句古诗词。其糟改的方法为:去网上搜寻压“ong”韵的古诗词,把句尾的三个字换成“敲笨钟”。例如唐代诗人李贺有名句曰:“寻章摘句老雕虫,晓月当帘挂玉弓”,其中“虫”(chong)和“弓”(gong)都压了“ong”韵。于是这句诗就被糟改为“寻章摘句老雕虫,晓月当帘敲笨钟”。

现在给你一大堆古诗词句,要求你写个程序自动将压“ong”韵的句子糟改成“敲笨钟”。

输入格式:

输入首先在第一行给出一个不超过 20 的正整数 N。随后 N 行,每行用汉语拼音给出一句古诗词,分上下两半句,用逗号 , 分隔,句号 . 结尾。相邻两字的拼音之间用一个空格分隔。题目保证每个字的拼音不超过 6 个字符,每行字符的总长度不超过 100,并且下半句诗至少有 3 个字。

输出格式:

对每一行诗句,判断其是否压“ong”韵。即上下两句末尾的字都是“ong”结尾。如果是压此韵的,就按题面方法糟改之后输出,输出格式同输入;否则输出 Skipped,即跳过此句。

输入样例:

5
xun zhang zhai ju lao diao chong, xiao yue dang lian gua yu gong.
tian sheng wo cai bi you yong, qian jin san jin huan fu lai.
xue zhui rou zhi leng wei rong, an xiao chen jing shu wei long.
zuo ye xing chen zuo ye feng, hua lou xi pan gui tang dong.
ren xian gui hua luo, ye jing chun shan kong.

输出样例:

xun zhang zhai ju lao diao chong, xiao yue dang lian qiao ben zhong.
Skipped
xue zhui rou zhi leng wei rong, an xiao chen jing qiao ben zhong.
Skipped
Skipped

代码长度限制                        16 KB

时间限制                                400 ms

内存限制                                64 MB

思路: 

主要功能是读取用户输入的一系列字符串,然后检查每个字符串中是否同时包含"ong,"和"ong."这两个子串。如果找到这样的字符串,程序会输出这个字符串(但去掉末尾的三个字),并在末尾加上" qiao ben zhong.";如果没有找到,就输出"Skipped"。

头文件和命名空间:

这里包含了<bits/stdc++.h>头文件,它实际上是一个包含了C++标准库中几乎所有头文件的头文件。使用using namespace std;为了避免在代码中重复写std::前缀。

#include <bits/stdc++.h>  
 
using namespace std;

主函数:

程序的入口

int main()
 
{
 
       ....
 
}

读取字符串数量

  • 使用cin读取一个整数n,表示接下来要输入的字符串数量。
  • getchar(); 用来吸收输入缓冲区中的换行符,防止它影响后续的getline调用。
    cin >> n;
    string str;
    getchar();

处理每个字符串: 

  • 使用for循环遍历n次,每次循环中:
    • 使用getline(cin, str); 从标准输入读取一行字符串,并存储在str中。
    for(int i = 0; i < n; i++)
    {
        getline(cin,str);
        .....
    }

使用for循环来读取n行字符串。getline(cin,str);用于读取一行字符串,并将其存储在str中。 

 检查字符串

  • 使用str.find("ong,") 和 str.find("ong.") 检查字符串str中是否同时包含"ong,"和"ong."这两个子串。
  • 如果两个子串都存在,则执行特定的输出操作;否则,输出"Skipped"。
 if(str.find("ong,") != -1 && str.find("ong.") != -1)
 {
     .....
 }

else
{
     cout << "Skipped" << endl;
}

使用str.find()函数来检查字符串str中是否包含"ong,"和"ong."。如果find()函数返回的不是-1,则说明找到了该子字符串。 

输出操作

  • 如果字符串满足条件,则执行以下步骤:
    • 初始化变量sum为0,用于计数遇到的空格数;int sum = 0;
    • 初始化变量k为0,用于存储最后一个非空格字符的索引;int k = 0;
    • 从字符串末尾开始遍历,每遇到一个空格,sum加1,并更新k的值;for(int j = str.size() - 1; sum != 3; j--)
    • sum达到3时,停止遍历;
    • 从字符串开头到索引k的位置输出字符;
      for(int z = 0; z < k; z++)
      {
          cout << str[z];
      }
    • 输出固定的字符串" qiao ben zhong."。
       cout << " qiao ben zhong." << endl;

如果找到了这两个子字符串,代码会执行以下操作:

* 使用一个内部循环从字符串的末尾开始,计算遇到的空格数量,直到找到3个空格为止。在这个过程中,`k`被设置为最后一个被检查的字符的索引。

* 使用另一个循环从字符串的开头到`k`,输出这些字符。

* 输出" qiao ben zhong."。

int sum = 0,k = 0;  
for(int j = str.size() - 1; sum != 3; j--)  
{  
    if(str[j] == ' ')  
        sum++;  
    k = j;  
}  
for(int z = 0; z < k; z++)  
{  
    cout << str[z];  
}  
cout << " qiao ben zhong." << endl;

注意

  • 代码中使用getchar();来消耗输入缓冲区中的换行符。这是因为在读取n之后,输入缓冲区中可能还留有一个换行符,如果不消耗掉,它会被getline()读取,导致第一行字符串为空。
  • 在处理找到的字符串时,内部循环的k = j;应该放在if语句块内部,否则k只会被设置为最后一个字符的索引,而不是最后一个空格的索引。

代码:

#include <bits/stdc++.h>

using namespace std;

int main()
{
    int n; 
    cin >> n;
    string str;
    getchar();
    for(int i = 0; i < n; i++)
    {
        getline(cin,str);
        if(str.find("ong,") != -1 && str.find("ong.") != -1)
        {
            int sum = 0,k = 0;
            for(int j = str.size() - 1; sum != 3; j--)
            {
                if(str[j] == ' ')
                {
                    sum++;
                    k = j;
                }
            }
            for(int z = 0; z < k; z++)
            {
                cout << str[z];
            }
            cout << " qiao ben zhong." << endl;
        }
        else
        {
            cout << "Skipped" << endl;
        }
    }
    return 0;
}

测试结果:

ptal1-059 敲笨钟,c++,开发语言文章来源地址https://www.toymoban.com/news/detail-847412.html

到了这里,关于【PTA】L1-059 敲笨钟(C++)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • PTA L1-048 矩阵A乘以B C语言

    输入样例1: 输出样例1: 输入样例2: 输出样例2: 也就是: 第一个矩阵第一行的每个值与第二个矩阵第一列的每个值对应相乘后加和起来,就得到了乘积矩阵的第一行的第一个值 第一个矩阵第一行的每个值与第二个矩阵第二列的每个值对应相乘后加和起来,就得到了乘积矩

    2024年02月03日
    浏览(46)
  • 【PTA】L1-064 估值一亿的AI核心代码(详C++)

    题目链接: L1-064 估值一亿的AI核心代码 - 团体程序设计天梯赛-练习集 (pintia.cn) 题目要求:  输入格式: 输出格式: 输入样例: 输出样例: 思路: 相关好用函数介绍:  字符函数: erase函数的三种使用方法: replace() 函数用法 代码: 测试结果:  以上图片来自新浪微博。

    2024年04月10日
    浏览(77)
  • L1-095 分寝室PTA

    学校新建了宿舍楼,共有 n 间寝室。等待分配的学生中,有女生 n0​ 位、男生 n1​ 位。所有待分配的学生都必须分到一间寝室。所有的寝室都要分出去,最后不能有寝室留空。 现请你写程序完成寝室的自动分配。分配规则如下: 男女生不能混住; 不允许单人住一间寝

    2024年02月10日
    浏览(44)
  • PTA L1-095 分寝室 (20 分)

    学校新建了宿舍楼,共有 n n n 间寝室。等待分配的学生中,有女生 n 0 n_0 n 0 ​ ​ 位、男生 n 1 n_1 n 1 ​ ​位。所有待分配的学生都必须分到一间寝室。所有的寝室都要分出去,最后不能有寝室留空。 现请你写程序完成寝室的自动分配。分配规则如下: 男女生不能混住; 不

    2023年04月23日
    浏览(37)
  • PTA L1-049 天梯赛座位分配(详解)

    前言:内容包括:题目,代码实现,大致思路,代码解读 天梯赛每年有大量参赛队员,要保证同一所学校的所有队员都不能相邻,分配座位就成为一件比较麻烦的事情。为此我们制定如下策略:假设某赛场有 N 所学校参赛,第 i 所学校有 M[i] 支队伍,每队 10 位参赛选手。令

    2024年02月03日
    浏览(46)
  • 2023 PTA天梯赛补题(L1 & L2)

    输入输出题 输入输出题 k == n 和 k == m 分别输出,题目怎么说就怎么做 判断一下c 等于a + b还是a*b或者都不是,分别按要求输出 针对每一群玩游戏的宝宝,枚举判断一下就好了 写的有点烦,基本就是一步一步模拟,思路在注释里写了 枚举分配方案,代码中a代表女生寝室的数

    2024年02月03日
    浏览(40)
  • PTA L1-048 矩阵A乘以B

    前言:内容包括四大模块:题目,代码实现,大致思路,代码解读 给定两个矩阵A和B,要求你计算它们的乘积矩阵AB。需要注意的是,只有规模匹配的矩阵才可以相乘。即若A有Ra​行、Ca​列,B有Rb​行、Cb​列,则只有Ca​与Rb​相等时,两个矩阵才能相乘。 输入格式: 输入

    2024年02月04日
    浏览(34)
  • PTA L1-025 正整数A+B(详解)

    前言:本期是关于正整数A+B的详解,内容包括四大模块:题目,代码实现,大致思路,代码解读,今天你c了吗?   题的目标很简单,就是求两个正整数 A 和 B 的和,其中 A 和 B 都在区间[1,1000]。稍微有点麻烦的是,输入并不保证是两个正整数。 输入格式: 输入在一行给出

    2023年04月21日
    浏览(40)
  • PTA L1-064 估值一亿的AI核心代码(详解)

    前言:内容包括:题目,代码实现,大致思路,代码解读 以上图片来自新浪微博。 本题要求你实现一个稍微更值钱一点的 AI 英文问答程序,规则是: 无论用户说什么,首先把对方说的话在一行中原样打印出来; 消除原文中多余空格:把相邻单词间的多个空格换成 1 个空格,把行首

    2024年02月03日
    浏览(39)
  • 【2023团体程序设计天梯赛CCCC】GPLT2023,L1~L2部分(PTA,L1-089~L1-096,L2-045~L2-048)题解代码&复盘

    概要 L1部分:L1-089~L1-096 L2部分:L2-045~L2-048 L3部分:L3-033~L3-036 L1-089 最好的文档 5 L1-090 什么是机器学习 5 L1-091 程序员买包子 10 L1-092 进化论 10 L1-093 猜帽子游戏 15 L1-094 剪切粘贴 15 L1-095 分寝室 20 L1-096 谁管谁叫爹 20 L2-045 堆宝塔 25 L2-046 天梯赛的赛场安排 L2-047 锦标赛 25 L2-048

    2024年02月01日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包