題目連結 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", l...