这道题真的是超级无敌巨坑,算法笔记也坑,gets()函数不知道为啥在PAT编译通不过去,只能改用cin.getline(),还有个巨坑的地方在于256个字符至少要257个字节才能存储,算法笔记里面居然只开了256,导致我最后一个测试总是过不去!!!
真的被坑惨了,这题做了一个多小时了,垃圾o(╥﹏╥)o
虽然逆转后确实好比较些,但开始自己想的时候就是直接从后向前比较的,也是可以做的,下面是AC代码!
using namespace std;
#include<bits/stdc++.h>
int main(){
int n,i,j=0,m=0,len,mi=256;
char s[100][256],tmp;
scanf("%d",&n);
getchar();//Attention!
for(i=0;i<n;i++){
cin.getline(s[i],256);//gets() isn't permitted!
len=strlen(s[i]);
if(len < mi){
mi=len;
j=i;
}
}
bool flag=1;
for(int k=0;k<mi;k++){
tmp=s[j][mi-1-m];
for(i=0;i<n;i++){
int leni=strlen(s[i]);
if(tmp != s[i][leni-1-m]){
flag=0;
break;
}
}
if(flag == 1) m++;
else break;
}
if(m){
// printf("%d\n",m);
for(i=mi-m;i<=mi-1;i++) printf("%c",s[j][i]);
}
else printf("nai");
return 0;
}
这是用reverse函数逆转后正向比较的代码。
using namespace std;
#include<bits/stdc++.h>
int main(){
int n,i,j=0,m=0,len,mi=256;
char s[100][257],tmp;//字符数组第二维要开257,才能保证输入256个字符!
scanf("%d",&n);
getchar();//Attention!
for(i=0;i<n;i++){
cin.getline(s[i],257);//gets() isn't permitted!
len=strlen(s[i]);
reverse(s[i],s[i]+len);//STL模板中逆转字符串函数
if(len < mi) mi=len;
}
bool flag=1;
for(int k=0;k<mi;k++){
tmp=s[0][k];
for(i=1;i<n;i++){
if(tmp != s[i][k]){
flag=0;
break;
}
}
if(flag == 1) m++;
else break;
}
if(m){
// printf("%d\n",m);
for(i=m-1;i>=0;i--) printf("%c",s[0][i]);
}
else printf("nai");
return 0;
}