少年 DXH
时间限制:1000 ms | 内存限制:65535 KB
难度:2
- 描写叙述
- 大家都知道,DXH 幼时性格怪癖,小朋友都不喜欢和他玩,这样的情况一直到 DXH 的少年时期也没有改变。
少年时期的 DXH 迷上了"回文串",“回文串”是指正着读倒着读都一样的字符串。
DXH一个人的时候喜欢在地上随便写一个字符串 S,然后在这个字符串的右边加入尽量少的字符(能够不加入,就是 0 个),使得这个字符串变成“回文串”。但玩的时间长了,DXH 的手也酸了,聪明的你能帮他写一个程序,算出这个加入最少字符形成的回文串吗?一个字符串 S[1..L]被称为回文串,当且仅当 S[i] = S[L - i + 1] (1 <= i <= L)。
- 输入
- 第一行,一个 T (T <= 100),表示有 T 个字符串须要你推断
之后 T 行,每行一个字符串 S。
S 的长度|S|满足 1 <= |S| <= 50,且 S 仅仅由小写字母‘a‘ -‘z‘组成。
- 输出
- 对于每一个字符串,输出一行,每行一个字符串 S‘, 是在 S 右側加入最少的字符形成的回文串。
- 例子输入
-
5 add cigartragic dxhisgirl acaba abczyxyz
- 例子输出
-
adda cigartragic dxhisgirlrigsihxd acabaca abczyxyzcba
-
代码:
-
#include<stdio.h> #include<string.h> int main() { int T,len,a,b,min,max,k,i; char str[60]; scanf("%d",&T); while(T--) { k=0; scanf("%s",str); len=strlen(str); for(i=0;i<len;i++) { if(str[i]==str[len-1]) { a=min=i; b=max=len-1; for(;max>=min;max--,min++) { if(str[max]==str[min]) k=1; else { k=2; break; } } } if(k==1) break; } for(i=0;i<len-1;i++) printf("%c",str[i]); for(i=a;i>=0;i--) printf("%c",str[i]); printf("\n"); } return 0; }
时间: 2024-11-06 18:28:17