#UVa:401-Palindromes

灆洢 2012-03-31 00:41:06

依照題目要求去比對字串的值即可得解。

C++(0.028)

/*******************************************************/
/* UVa 401 Palindromes                                 */
/* Author: Maplewing [at] knightzone.studio            */
/* Version: 2012/03/31                                 */
/*******************************************************/
#include<iostream>
#include<cstdio>
#include<cctype>
using namespace std;

const char mirror[36] = "A000300HIL0JM0O0002TUVMXY51SE0Z0080";

int main(){
  string s;
  bool palindrome, mirrored;
  while( getline( cin, s ) ){
    palindrome = true;
    mirrored = true;
    for( int i = 0; i <= s.length()/2 ; i++ ){
      if( s[i] != s[s.length()-i-1] )
        palindrome = false;
      if( isupper(s[s.length()-i-1]) && (s[i] != mirror[s[s.length()-i-1]-'A']) )
        mirrored = false;
      if( isdigit(s[s.length()-i-1]) && (s[i] != mirror[s[s.length()-i-1]-'1'+26]) )
        mirrored = false;
    }
    printf( "%s -- is ", s.c_str() );
    if( palindrome && mirrored ) printf( "a mirrored palindrome.\n" );
    else if( palindrome ) printf( "a regular palindrome.\n" );
    else if( mirrored ) printf( "a mirrored string.\n" );
    else printf( "not a palindrome.\n" );
    printf( "\n" );
  }
  return 0;
}

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

這個網站採用 Akismet 服務減少垃圾留言。進一步瞭解 Akismet 如何處理網站訪客的留言資料