1077.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~
- 1
- 2
- 3
- 4
Sample Output 1:
nyan~
- 1
Sample Input 2:
3
Itai!
Ninjinnwaiyada T_T
T_T
- 1
- 2
- 3
- 4
Sample Output 2:
nai
- 1
题目要求是求相同的字符串后缀
一开始的解题思路是:
#include<cstdio>
#include<iostream>
#include<cstring>
using namespace std;
int main()
{
int N;
int ans=0;
scanf("%d",&N);
int minlen = 256;
char a[101][300];
getchar();
for(int i=0;i<N;i++)
{
fgets(a[i],256,stdin);
int len = strlen(a[i]);
if(minlen>len) minlen =len;
for(int j=0;j<minlen/2;j++)//reverse
{
char temp;
temp = a[i][j];
a[i][j]=a[i][-j+len-1];
a[i][-j+len-1]=temp;
}
}
for(int i=1;i<minlen;i++)
{
bool flag=true;
char c = a[0][i];
for(int j = 1;j<N;j++)
{
if(c!=a[j][i])
{
flag = false;
break;
}
}
if(flag) ans++;
else break;
}
if(ans)
{
for(int i=ans-1;i>=1;i--)
{
printf("%c",a[0][i]);
}
}
else
{
printf("nai");
}
return 0;
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
感觉有点混乱
#include <iostream>
#include <algorithm>
using namespace std;
int main() {
int n;
scanf("%d\n", &n);
string ans;
for(int i = 0; i < n; i++) {
string s;
getline(cin, s);
int lens = s.length();
reverse(s.begin(), s.end());
if(i == 0) {
ans = s;
continue;
}
else {
int lenans = ans.length();
int minlen = min(lens, lenans);
for(int j = 0; j < minlen; j++) {
if(ans[j] != s[j]) {
ans = ans.substr(0, j);
break;
}
}
}
}
reverse(ans.begin(), ans.end());
if (ans.length() == 0)
ans = "nai";
cout << ans;
return 0;
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
以上的解法更加简便
使用到的新鲜函数是:getline, reverse, min
1. getline
istream& getline (char* s, streamsize n );
istream& getline (char* s, streamsize n, char delim );
- 1
- 2
字符串的输入方式之一,特点是遇到空格不停止输入
2. reverse
反转范围中元素的顺序[first,last)
3. min
输出两数中较小的一个,同理max是较大那个
文章来源: blog.csdn.net,作者:沧夜2021,版权归原作者所有,如需转载,请联系作者。
原文链接:blog.csdn.net/CANGYE0504/article/details/104065898
- 点赞
- 收藏
- 关注作者
评论(0)