a224

輸入說明 :

一筆測試資料一行,包含許許多多但總數不超過 1000 個的大小寫英文字母和標點符號。 不可思議的是,裡面不會有任何空白字元。

輸出說明 :

如果重新安排順序後,有辦法讓這一堆英文字母變成迴文的話,輸出「yes !」,否則輸出「no...」。 注意,大寫和小寫字母視為相同,即 A 和 a 是一樣的,並且,請忽視所有非英文字母的字元。

這題我原本的想法是(參考網路上的),如果一個字串是迴文,那你某個字母是奇數次的數量只能是1個 也就是下面的寫法,但是現在看,就算你數量對,排列的結果不是迴文,那還是錯的

所以真正的作法應該是,把讀進來的字串,一個字元字元的判斷是不是字母(是其他符號就捨棄),並且轉成小寫,存到另一個陣列,然後對那個陣列作迴文的判斷(a022), 裡面有提供isalpha和tolower兩個函式,前者判斷是不是子母,後者幫你轉成小寫,這邊就不提供正確的程式碼

#include<stdio.h>
#include<string.h>
int main()
{
int j,i,k;
char s[1001]={'\0'};


while(scanf("%s",s)!=EOF)
 {  
    int odd=0;
    int abc[26]={0};   //算輸入的字串a~z大小寫每一個有多少個 
    for(j=0;j<26;j++){
        for(i=0;i<strlen(s);i++){
            if(s[i]==65+j||s[i]==97+j){
              abc[j]+=1;
            }    
        }
    }

    for(k=0;k<26;k++)
    {
    if(abc[k] %2==1)
      {odd ++ ;}        
    }  

    if(odd>=2)
    printf("no...\n");
    else 
    printf("yes !\n");
 }
return 0;
}