自我总结 (十)

## 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;
}
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值