2020年5月2日 星期六

UVA_401 Palindromes

題目網址:https://vjudge.net/problem/UVA-401

判斷給的字串是不是回文還是鏡像,有以下四種狀況:
  1. 是回文也是鏡像-左右翻轉後看起來是一樣,順著看或倒著看也一樣,ex.ATOYOTA
  2. 鏡像-左右翻轉後看起來是一樣,ex.2A3MEAS 
  3. 回文-順著看或倒著看也一樣,ex.ISAPALINILAPASI 
  4. 都不是


#include <iostream>
#include <string>
using namespace std;

string f = "AEHIJLMOSTUVWXYZ12358";
string b = "A3HILJMO2TUVWXY51SEZ8";

bool p_flag(string input);
bool m_flag(string input);

int main()
{
bool p_result,m_result;
string input_string;
while( getline( cin, input_string ) )
 {
 p_result = p_flag(input_string);
 m_result = m_flag(input_string);
 if( p_result && m_result )
  cout << input_string << " -- is a mirrored palindrome." << endl;
 else if( p_result )
  cout << input_string << " -- is a regular palindrome." << endl;
 else if( m_result )
  cout << input_string << " -- is a mirrored string." << endl;
 else
  cout << input_string << " -- is not a palindrome." << endl;
 cout << endl;
 }
} 
//判斷是不是回文
//一個由前往後一個由後往前,相互比較
bool p_flag(string input)
{
int backward = input.length() - 1;
for( int i = 0; ; i++, backward-- )
 {
 if( i <= backward )
  {
  if( input[i] != input[backward] )
   return false;
  }
 else
   return true;
 }
}
//判斷是不是鏡像
bool m_flag(string input)
{
int backward = input.length() - 1;

int f_point,b_point;
for( int forward = 0; ; forward++, backward-- )
 {
 if( forward <= backward )
  {
  for( int i = 0; i < f.length(); i++ )
   if( f[i] == input[forward] )
    f_point = i;
  for( int i = 0; i < b.length(); i++ )
   if( b[i] == input[backward] )
    b_point = i;
  if( f_point != b_point )
   return false;  
  }
 else
  return true;
 }
}

沒有留言:

張貼留言