【PTA】敲笨钟

题目重述

微博上有个自称“大笨钟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
题解

大体思路就是先找逗号的位置,使用substr函数看看末尾是不是压ong,如果是,再找句号,如果也压,从最后开始数空格,记录位置,再次使用substr剪切函数+敲笨钟的拼音。

唯一需要注意的是最后一个测试点,题目只说下句最少三个字,没说上句必须有字,所以最后一个测试点类似于这样: ,guo yu gong.

C++ AC
#include <iostream>
#include <stack>
#include <bits/stdc++.h>
using namespace std;
int main()
{
    int n;
    string strs[25];
    cin>>n;
    cin.ignore();//用于解决cin与getline连续使用导致的缓冲区回车问题
    for(int i=0; i<n; i++)
    {
        getline(cin,strs[i]);
    }
    for(int i=0; i<n; i++)
    {
        int loc_1=0;
        while(strs[i][loc_1]!=',')//寻找逗号的位置
        {
            loc_1++;
        }
        //如果上句压
        if(loc_1>=3&&strs[i].substr(loc_1-3,3)=="ong")
        {
            while(strs[i][loc_1]!='.')
            {
                loc_1++;
            }
            //如果下句也压
            if(strs[i].substr(loc_1-3,3)=="ong")
            {
                int cnt=0;
                int loc_2=strs[i].length()-1;
                while(cnt!=3)
                {
                    loc_2--;
                    if(strs[i][loc_2]==' ')
                    {
                        cnt++;
                    }
                }
                cout<<strs[i].substr(0,loc_2)+" qiao ben zhong."<<endl;
            }
            else
            {
                cout<<"Skipped"<<endl;
            }
        }
        else
        {
            cout<<"Skipped"<<endl;
        }
    }
}

7-8 (15分) 微博上有个自称“大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
<think>好的,我现在需要帮助用户找到与“pta”相关的Java题目解法。首先,用户提到的“”可能是指PTA(Programming Teaching Assistant)平台上的某个题目,但这个名字可能不准确或者是题目的俗称。我需要先回忆或者查找相关的题目名称或内容。 根据PTA常见的题目类型,“”可能涉及到字符串处理,比如古诗的押匹配,或者特定的格式修正。比如,可能有题目要求找出诗句中不符合押规则的地方并进行调整。例如,每句的末尾应该是“ong”结尾,如果不是,就需要修改后半句为“qiao ben zhong.”。 接下来,我需要确认用户提供的引用内容是否有相关的解法线索。查看用户提供的引用内容,引用[4]提到了手机号验证,引用[5]是关于字符串前缀,引用[3]处理重复数据,引用[1]是关于Java类的构造方法。这些可能和字符串处理相关,但“”更可能涉及正则表达式或字符串分割操作。 用户可能需要的是处理每行诗句,检查末尾的母,并替换后半句。Java中常用的方法是使用split分割字符串,然后用正则表达式匹配结尾。例如,将句子按逗号分割成前半句和后半句,检查两部分是否都以“ong”结尾,如果是,则将后半句的后三个字替换为“qiao ben zhong.”。 然后,我需要确保代码符合PTA的要求,比如使用Scanner处理输入,注意处理多行输入的情况,以及输出格式的正确性。同时,要注意PTA中对时间和内存的限制,避免使用低效的方法导致超时,比如引用[3]提到的Scanner可能导致的超时问题,但根据引用[2],虽然Eclipse中hasNextInt()可能不停止,但在PTA是可以正常提交的,所以可能可以继续使用Scanner。 最后,生成示例代码,并验证其逻辑是否正确。例如,读取每行输入,分割逗号,检查前后部分是否符合条件,然后进行替换。如果不符合条件,则输出“skipped”。同时,需要注意中文字符的处理和字符串操作的正确性。 总结步骤: 1. 读取输入行数n。 2. 对于每行,按逗号分割成前后两部分。 3. 检查前后部分是否都以“ong”结尾。 4. 如果符合条件,将后半句的最后三个字替换,并输出。 5. 否则,输出“skipped”。 这样就能解决“”的问题,满足题目的要求。</think>根据您的描述,“”可能是PTA平台上与字符串处理相关的题目。通过分析引用内容和PTA常见题型,推测题目要求类似**“古诗词押修正”**,需用Java实现字符串匹配与替换。以下是可能的解法框架: --- ### 解法思路 1. **输入规则** 每行输入为一句诗(如“明月几时有,把酒问青天”),要求判断前半句和后半句是否均以`ong`结尾 若满足条件,则将后半句的最后三个字替换为`qiao ben zhong.` 否则输出`skipped` 2. **关键步骤** - 使用`split(",")`分割字符串为前/后半句 - 正则表达式匹配结尾`ong`(如`.*ong$`) - 字符串截取与替换(注意中文字符长度处理) --- ### 示例代码 ```java import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); sc.nextLine(); // 处理换行符 while (n-- > 0) { String line = sc.nextLine().trim(); String[] parts = line.split(","); if (parts.length != 2) { System.out.println("skipped"); continue; } // 判断是否以ong结尾 if (parts[0].matches(".*ong") && parts[1].matches(".*ong")) { String[] backWords = parts[1].split(" "); if (backWords.length < 3) { System.out.println("skipped"); continue; } // 替换后三个字 StringBuilder sb = new StringBuilder(); for (int i = 0; i < backWords.length - 3; i++) { sb.append(backWords[i]).append(" "); } sb.append("qiao ben zhong."); System.out.println(parts[0] + "," + sb.toString().trim()); } else { System.out.println("skipped"); } } sc.close(); } } ``` --- ### 注意事项 1. **中文字符处理** 需确保字符串分割时按空格切分(如`split(" ")`),且替换操作前验证词数是否足够 2. **输入格式** 使用`sc.nextLine()`读取整行,避免因空格导致解析错误[^2] 3. **性能优化** PTA对时间敏感,若数据量大可改用`BufferedReader`替代`Scanner`[^3] ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值