## Palindromes _easy version
Problem Description
“回文串”是一个正读和反读都一样的字符串,比如“level”或者“noon”等等就是回文串。请写一个程序判断读入的字符串是否是“回文”。
Input
输入包含多个测试实例,输入数据的第一行是一个正整数n,表示测试实例的个数,后面紧跟着是n个字符串。
Output
如果一个字符串是回文串,则输出"yes",否则输出"no".
Sample Input
4
level
abcde
noon
haha
Sample Output
yes
no
yes
no
问题链接:HDU2029 Palindromes _easy version。
问题简述:(略)
问题分析:
1.不知道字符串有多长,就把字符数组定义的大一些。
2.再一点就是,使用前后双下标滑动来判定一个字符串是否为回文串。这也是一种套路,程序也比较简洁。
代码如下:
#include <stdio.h>
#include <string.h>
int main(void)
{
int n, flag, start, end;
char a[4096];
scanf("%d", &n);
while(n--) {
// 读入字符串
scanf("%s", a);
// 判断是否为回文
start = 0;
end = strlen(a) - 1;
flag = 1;
while(start < end) {
if(a[end] != a[start]) {
flag = 0;
break;
}
start++;
end--;
}
// 输出结果
if(flag)
printf("yes\n");
else
printf("no\n");
}
return 0;
}
用高级的东西写程序,例如函数等,代码要简洁很多!现在计算机速度够快,存储够大,已经不是问题。 用低级的东西实现程序,更需要技巧,更需要设计。
用函数做:
#include <stdio.h>
#include <string.h>
void Palindromes(char *a);
int main()
{
int n,i;
while (scanf("%d",&n) != EOF)
{
getchar();
for (i = 0;i < n;i ++)
{
char a[1000] = {0};
gets(a);
Palindromes(a);
}
}
return 0;
}
void Palindromes(char *a)
{
int j,flag = 1;
int l = strlen(a);
for (j = 0;j < l / 2;j ++)
{
if (a[j] != a[l - j - 1])
{
flag = 0;
printf("no\n");
return ;
}
}
if (flag)
printf("yes\n");
return ;
}
配合适当的方法就更简单。
代码如下:
#include<stdio.h>
#include<string.h>
int main()
{
char str1[1000],str2[1000];
int n;
scanf("%d",&n);
while(n--)
{
scanf("%s",str1);
strcpy(str2,str1);//复制str1到str2
strrev(str1);//翻转str1
if(strcmp(str1,str2)==0)//若str1=str2,则返回0;若str1>str2,则返回正数;若str1<str2,则返回负数
printf("yes\n");
else
printf("no\n");
}
return 0;
}