PAT---A1077. Kuchiguse (20)

2023-10-11 02:08
文章标签 20 pat kuchiguse a1077

本文主要是介绍PAT---A1077. Kuchiguse (20),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题目要求:
The Japanese language is notorious for its sentence ending particles. Personal preference of such particles can be considered as a reflection of the speaker’s personality. Such a preference is called “Kuchiguse” and is often exaggerated artistically in Anime and Manga. For example, the artificial sentence ending particle “nyan~” is often used as a stereotype for characters with a cat-like personality:

Itai nyan~ (It hurts, nyan~)
Ninjin wa iyada nyan~ (I hate carrots, nyan~)
Now given a few lines spoken by the same character, can you find her Kuchiguse?

Input Specification:

Each input file contains one test case. For each case, the first line is an integer N (2<=N<=100). Following are N file lines of 0~256 (inclusive) characters in length, each representing a character’s spoken line. The spoken lines are case sensitive.

Output Specification:

For each test case, print in one line the kuchiguse of the character, i.e., the longest common suffix of all N lines. If there is no such suffix, write “nai”.

Sample Input 1:
3
Itai nyan~
Ninjin wa iyadanyan~
uhhh nyan~
Sample Output 1:
nyan~
Sample Input 2:
3
Itai!
Ninjinnwaiyada T_T
T_T
Sample Output 2:
nai

解题思路: 由于判断共同后缀,则将字符串反转再判断可以省很多事。反转后,判断第0位是否为共同后缀(必须所有的字符串的这一位都要相同,可以以第一个字符串作为基准,判断其他字符串的第0位是否与其相同 ),然后再判断第一位,第二位。。。。。。只要有一位不是所有字符串都相同,则判断结束

参考代码:

#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
int main()
{int minLen = 256;           //假设一个最大值(随意定)。int N;cin >>N;int ans = 0;char s[102][256];           //使用二维数组来存储字符串getchar();                  //因为随后要输入的是字符类型,所以要使用getchar先将换行符取走for(int i=0;i<N;i++){gets(s[i]);//寻找最短的那个字符串的长度,因为共同后缀只需要以最短的字符串的长度为基准int len = strlen(s[i]);if(len<minLen)minLen = len;//将数组进行反转,因为反转后容易代码实现for(int j = 0;j<strlen(s[i])/2;j++){char b;b = s[i][j];s[i][j] = s[i][strlen(s[i])-1-j];s[i][strlen(s[i])-1-j] = b;}}for(int i=0;i<minLen;i++){int flag = 1;           //flag为1表明此字符为共同后缀,此代码先假设为共同后缀char a = s[0][i];       //将第一个字符串的第i位赋值给a//将a与每个字符串的第i位比较,如有一个不相等,则表明共同后缀不包括此字符,即结束判断共同后缀for(int j=0;j<N;j++)    {if(a != s[j][i]){flag = 0;  //因为代码开始假设有共同后缀,所以此时要设置标志位为0表明标志位到此处结束break;}}//当flag为1即未被置为0时,则使ans+1表示增加一位共同后缀,并开始判断下一位//当flag为0时表明某一位不是共同后缀,则判断到此为止if(flag)ans++;elsebreak;}if(ans == 0)cout << "nai";elsefor(int i=ans-1;i>=0;i--)cout <<s[0][i];return 0;
}

此外,本人还写出了一种实现方法,但有诸多测试点错误,在此贴出,望各位大神能看到后给予宝贵的解答

#include <iostream>
#include <cstring>
using namespace std;
//反转字符串
void reverse_fun(string *a)
{for(int i = 0;i<(*a).length()/2;i++){char b;b = (*a)[i];(*a)[i] = (*a)[(*a).length()-1-i];(*a)[(*a).length()-1-i] = b;}
}int main()
{int minLen = 259;int N;cin >>N;int flag = 0;               //flag为0表明没有共同后缀char common[100];string s[102];              //使用字符串数组来存储输入getchar();                  //获取换行符for(int i=0;i<N;i++){getline(cin,s[i]);reverse_fun(&s[i]);//统计最短字符串长度int len = s[i].length();if(len<minLen)minLen = len;}for(int i=0;i<minLen;i++){int true1 = 0;char a = s[0][i];       //将第一个字符串的第i位赋值给afor(int j=0;j<N;j++)    //将a与每个字符串的第i位比较{if(a == s[j][i]){true1++;   //a与一个字符串的此位相同则true1+1,如true1最终和N相同,则表明所有的字符串的此位都相同}elsebreak;}if(true1 == N){common[i] = a;flag = 1;           //如果N个字符串的此位都相同,则表明此位为共同后缀,则flag置为1}}if(flag == 0)cout << "nai";elsefor(int i=strlen(common)-1;i>=0;i--)cout <<common[i];return 0;
}

这篇关于PAT---A1077. Kuchiguse (20)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/184750

相关文章

系统架构师考试学习笔记第三篇——架构设计高级知识(20)通信系统架构设计理论与实践

本章知识考点:         第20课时主要学习通信系统架构设计的理论和工作中的实践。根据新版考试大纲,本课时知识点会涉及案例分析题(25分),而在历年考试中,案例题对该部分内容的考查并不多,虽在综合知识选择题目中经常考查,但分值也不高。本课时内容侧重于对知识点的记忆和理解,按照以往的出题规律,通信系统架构设计基础知识点多来源于教材内的基础网络设备、网络架构和教材外最新时事热点技术。本课时知识

【C++学习笔记 20】C++中的智能指针

智能指针的功能 在上一篇笔记提到了在栈和堆上创建变量的区别,使用new关键字创建变量时,需要搭配delete关键字销毁变量。而智能指针的作用就是调用new分配内存时,不必自己去调用delete,甚至不用调用new。 智能指针实际上就是对原始指针的包装。 unique_ptr 最简单的智能指针,是一种作用域指针,意思是当指针超出该作用域时,会自动调用delete。它名为unique的原因是这个

【JavaScript】LeetCode:16-20

文章目录 16 无重复字符的最长字串17 找到字符串中所有字母异位词18 和为K的子数组19 滑动窗口最大值20 最小覆盖字串 16 无重复字符的最长字串 滑动窗口 + 哈希表这里用哈希集合Set()实现。左指针i,右指针j,从头遍历数组,若j指针指向的元素不在set中,则加入该元素,否则更新结果res,删除集合中i指针指向的元素,进入下一轮循环。 /*** @param

【语句】如何将列表拼接成字符串并截取20个字符后面的

base_info = "".join(tree.xpath('/html/head/script[4]/text()'))[20:] 以下是对这个语句的详细讲解: tree.xpath('/html/head/script[4]/text()')部分: tree:通常是一个已经构建好的 HTML 文档树对象,它是通过相关的 HTML 解析库(比如 lxml)对 HTML 文档进行解

C++20中支持的非类型模板参数

C++20中支持将类类型作为非类型模板参数:作为模板参数传入的对象具有const T类型,其中T是对象的类型,并且具有静态存储持续时间(static storage duration)。       在C++20之前,非类型模板参数仅限于:左值引用类型、整数类型、指针类型、指向成员类型的指针、枚举类型、std::nullptr_t。在C++20中,它已扩展并支持:浮点类型、字面量类类

Google 实现量子霸权!3分20秒运算,世界第一超算要跑1万年!

大数据技术与架构 点击右侧关注,大数据开发领域最强公众号! 暴走大数据 点击右侧关注,暴走大数据! By  大数据技术与架构 场景描述:谷歌宣称“量子霸权”已经实现,他们首次在实验中证明了量子计算机对于传统架构计算机的优越性:在世界第一超算 Summit 需

PAT甲级-1044 Shopping in Mars

题目   题目大意 一串项链上有n个钻石,输入给出每个钻石的价格。用m元买一个连续的项链子串(子串长度可为1),如果不能恰好花掉m元,就要找到最小的大于m的子串,如果有重复就输出多个,按递增顺序输出子串的前端和后端索引。 原来的思路 取连续的子串使和恰等于m,没有恰等于就找最小的大于。可以将子串依次累加,使得每个位置都是起始位置到该位置的序列和,整个数组显递增顺序,就可以用右边减左边

UI 自动化技能:20个实战技巧!测试工程师必看!

大家周五 好啊!忙碌了一周,又可以懒洋洋躺在沙发上了~~~ 又到了每年的金九银十了,今天聊聊如何提升UI自动化话题... 你是否在求职过程中感受到UI自动化的技能不足? 随着测试行业的发展,UI自动化测试已成为每位测试工程师的必修课。无论你是想提升现有的测试效率,还是在找工作中获得竞争优势,掌握UI自动化技能都能为你带来巨大的帮助。那么,如何快速提升这些技能呢? UI(用户界面)自

【大数据Java基础- Java并发 20】深入分析synchronized的实现原理

记得刚刚开始学习Java的时候,一遇到多线程情况就是synchronized,相对于当时的我们来说synchronized是这么的神奇而又强大,那个时候我们赋予它一个名字“同步”,也成为了我们解决多线程情况的百试不爽的良药。但是,随着我们学习的进行我们知道synchronized是一个重量级锁,相对于Lock,它会显得那么笨重,以至于我们认为它不是那么的高效而慢慢摒弃它。 诚然,随着Javs S

PAT (Advanced Level) Practice——1011,1012

1011:  链接: 1011 World Cup Betting - PAT (Advanced Level) Practice (pintia.cn) 题意及解题思路: 简单来说就是给你3行数字,每一行都是按照W,T,L的顺序给出相应的赔率。我们需要找到每一行的W,T,L当中最大的一个数,累乘的结果再乘以0.65,按照例子写出表达式即可。 同时还需要记录每一次选择的是W,T还是L