#include<iostream>
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<string.h>
#include<algorithm>
#include<map>
#include<vector>
#include<queue>
using namespace std;
求N个字符串公共后缀,先都反转再遍历
tips:注意不要刚好开256大小,不够,开到300好了,char数组最后一个是存/0!!!

int n,minLen=300,ans=0;
char s[100][300]; //至多100个字符串,每个字符串至多256个字符

int main(){
scanf("%d",&n); //n是字符串个数
getchar(); //接收换行符
for(int i=0;i<n;i++){
cin.getline( s[i],300 ); //算笔上是gets,此处注意下格式
int len=strlen(s[i]);
if(len < minLen) minLen =len; //取最小长度
for(int j=0; j<len/2; j++){ //反转字符串s[i],转化为求公共前缀
char temp=s[i][j]; //交换str[i]与str[len-i-1]
s[i][j]=s[i][ len-j-1 ];
s[i][ len-j-1 ]=temp;
}
}
for(int i=0; i<minLen ;i++){ //判断所有字符串的第i个字符是否全部相等
char c=s[0][i]; //取第一个字符串的第i个字符
bool same=true;
for(int j=1;j<n;j++){ //判断其余字符串中的第i个字符是否等于c
if(c != s[j][i] ){ //只要有一个不相等,就停止枚举,说明公共前缀到此为止
same=false;
break;
}
}
if(same) ans++; //若所有字符串中的第i位相等,则计数器ans加1
else break;
}
if(ans){
for(int i=ans-1;i>=0;i--){
printf("%c", s[0][i] );
}
}else {
printf("nai"); //不存在公共前缀
}
system("pause");
return 0;
}