首页 > 其他 > 详细

uva 401 Palindromes 解题报告

时间:2014-03-29 23:07:39      阅读:797      评论:0      收藏:0      [点我收藏+]

题目链接:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=342

题目意思:判断一行字符串为以下四种的哪一种:A regular palindrome,A mirrored string,A mirrored palindrome 和 is not a palindrome。A regular palindrome 就是我们见得最多的普通回文字符串,正读和反读是一样的;A mirrored string 就是根据以下的一套规则,将每个character变成对应的reverse,变完之后反读起来是和原来的字符串是一样的。

  bubuko.com,布布扣

比较坑爹的一个地方是,对于B、C、D、F、G、K...6、7 这些没有reverse的字符,如果字符串里有这些字符,就绝对不是mirrored string了。还有就是记得,输出每一行结果之后,还要追加一个空行!

    

bubuko.com,布布扣
 1 #include <iostream>
 2 #include <cstdlib>
 3 #include <cstdio>
 4 #include <cstring>
 5 using namespace std;
 6 
 7 const int maxn = 1000 + 10;
 8 char s[maxn], rev[maxn];
 9 int len, l;
10 
11 char test[] = {B, C, D, F, G, K, N, P, Q, R, 4, 6, 7, 9};     // 非 mirrored 的 字符
12 char match[] =  {E, J, L, S, Z, 2, 3, 5};
13 char match1[] = {3, L, J, 2, 5, S, E, Z};
14 
15 bool Is_palindrome()
16 {
17     for (int i = 0; i <= len/2; i++)
18     {
19         if (s[i] != s[len-i-1])
20             return false;
21     }
22     return true;
23 }
24 
25 bool check()
26 {
27     for (int j = 0; j < len; j++)
28     {
29         for (int i = 0; i <= 13; i++)
30         {
31             if (s[j] == test[i])  // 找到一个非mirrored 的 字母,就不可能是mirrored string了
32                 return false;
33         }
34     }
35     return true;
36 }
37 
38 bool Is_mirrored()
39 {
40     int f;
41     l = 0;
42     for (int i = 0; i < len; i++)
43     {
44         f = 0;
45         for (int j = 0; j < 8; j++)
46         {
47             if (s[i] == match[j])
48             {
49                 rev[l++] = match1[j];  // 替换该字符的reverse
50                 f = 1;
51             }
52         }
53         if (!f)    // reverse 与 它本身一样,例如A、I
54             rev[l++] = s[i];
55     }
56     for (int j = l-1; j >= 0; j--)
57         if (rev[j] != s[l-j-1])
58             return false;
59     return true;
60 }
61 
62 int main()
63 {
64     while (scanf("%s", s) != EOF)
65     {
66         len = strlen(s);
67       if (Is_palindrome())
68       {
69           if (check() && Is_mirrored())
70               printf("%s -- is a mirrored palindrome.\n\n", s);
71           else
72               printf("%s -- is a regular palindrome.\n\n", s);
73       }
74       else
75       {
76           if (check() && Is_mirrored())
77               printf("%s -- is a mirrored string.\n\n", s);
78           else
79               printf("%s -- is not a palindrome.\n\n", s);
80       }
81     }
82     return 0;
83 }
bubuko.com,布布扣

uva 401 Palindromes 解题报告,布布扣,bubuko.com

uva 401 Palindromes 解题报告

原文:http://www.cnblogs.com/windysai/p/3632905.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!