回文词 UVA401 面对多种文字输出的技巧

  1 #include<stdio.h>                                                                                                                                                                                       
  2 #include<string.h>
  3 #include<ctype.h>
  4 const char* words[] = {"is not a palindrome.","is a regular palindrome.","is a mirrored string.","is a mirrored palindorem."};
  5 const char* ans = {"A   3  HIL JM O   2TUVWXY51SE Z  8 "};
  6 int main()
  7 {
  8     char A[1000];
  9     memset(A,0,sizeof(A));
 10     while( scanf("%s",A) == 1){
 11         int p=1,q=1;
 12         int flag;
 13         int len = strlen(A);
 14         for(int i=0;i<=len/2;i++){
 15             if(A[i] != A[len-1-i])  p =0;   //palindrome
 16             if(isalpha(A[i])){               //mirrored string
 17                 flag = A[i] - 'A';
 18                 if(ans[flag] != A[len-1-i])   q=0;
 19             }
 20             else{
 21             flag = A[i] - '1' +26;
 22             if(ans[flag] != A[len-1-i])   q=0;
 23             }
 24         }
 25         printf("%s\n",words[2*q+p]);
 26     }
 27         return 0;
 28 }

详细题目可看《算法竞赛入门经典》p48

本题目有三个技巧。一是将所要转换的的序列整理成数组的形式。

二是将输出的文本也整理成数组,通过计算来输出,很巧妙。

三是将两个判断合二为一,使代码更加简洁。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值