高中生程式解題系統:明明愛明明

若您覺得文章寫得不錯,請點選文章上的廣告,來支持小編,謝謝。

題目連結 http://zerojudge.tw/ShowProblem?problemid=a224

演算法:
算出不分大小寫的26各英文字母(a-z)各自出現的次數letterCnt[26]
算出字母各自出現的次數letterCnt[26]為奇數的有幾個oddCnt
oddCnt 大於1,則無法重新排列成回文。

程式碼:
#include <cmath>
#include <cstdio>
#include <cstring>

using namespace std;

int main(void){
 char str[1000];
 
    while(scanf("%s", &str) != EOF)
    {
  char letterCnt[26] = {0};
  bool isPal = true;
  int oddCnt = 0;
  int len = strlen(str);
  
  for(int i = 0; i < len; i++)
  {
   char c = str[i];
   if(c >= 'A' && c <= 'Z')
   {
    letterCnt[c - 'A'] += 1;
   }
   else if(c >= 'a' && c <= 'z')
   {
    letterCnt[c - 'a'] += 1;
   }
  }
  
  for(int i = 0; i < 26; i++)
  {
   if(letterCnt[i] % 2 == 1)
   {
    oddCnt++;
   }
   
   if(oddCnt >= 2)
   {
    isPal = false;
    break;
   }
   //printf("%d\t", letterCnt[i]);
  }
  
  if(isPal == true)
   printf("yes !\n");
  else
   printf("no...\n");
    }

    return 0;
}

沒有留言: