close
Content
一看題名,你就該知道,這次跟迴文脫不了關係!
若你不確定什麼是「迴文」,請看 Google 字典的解釋:
 
迴文 huíwén
 
一種修辭方式。
通過詞語反復迴環使用,表達二者互相依存或彼此制約的關係,
如“人人為我,我為人人”、“饒人不癡漢,癡漢不饒人”。
Input
一筆測試資料一行,包含許許多多但總數不超過 1000 個的大小寫英文字母和標點符號。
不可思議的是,裡面不會有任何空白字元。
Output
如果重新安排順序後,有辦法讓這一堆英文字母變成迴文的話,輸出「yes !」,否則輸出「no...」。
注意,大寫和小寫字母視為相同,即 A 和 a 是一樣的,並且,請忽視所有非英文字母的字元。
 
Sample Input #1
ababa
bbaaa
Level
aaabbbcc
abcdefg
HowAreYouToday
A_man,_a_plan,_a_canal:_Panama.
Sample Output #1
yes !
yes !
yes !
no...
no...
no...
yes !

 

Python

#data=input()
data='A_man,_a_plan,_a_canal:_Panama.'
data="".join(filter(str.isalpha, data)) #只保留字母(現用在字串型態)
ascii=[0]*26
#"".join(filter(str.isalnum, "Colour Temperature is 2700 Kelvin"))
#只保留数字和字母

#"".join(filter(str.isdigit, "Colour Temperature is 2700 Kelvin"))
#只保留数字,中间有小数点请使用正则表达式
flag=0
data=list(data.upper())  #將字串轉大寫,然後再轉list
'''
我這裡得想法是,我開一個list,放置A-z,出現就將該櫃子+=1,
去計算每個字母出現的數量,這裡我是用ASCII碼去放櫃子
'''
for i in data:
    ascii[ord(i)-65]+=1
    #數字=ord('字串')
    #字串=chr(數字)
    
for j in ascii:
    if j%2==1:
        flag+=1
'''
這邊去計算每一個櫃子的數量,只有一個櫃子的的數量可以為奇數
'''
if flag>1:
    print(yes !)
else:
    print(no...)

 

C++

//思考方式
//利用string[]可以直接轉成ascii 
//用ascii判斷是否是英文字
//a~z 97~122 
//A~Z 65~90 
//迴文中最多只能有一個字出現奇數次
//其他都只能出現偶數次 
#include <iostream>
#include <string>
using namespace std;

int main()
{
    string istr1;
    //輸入測資 
    while(cin>>istr1)
    {
        //用陣列來計數 
        int count[26]={0};
        
        //一個字一個字判斷出現幾個英文字 
        for(int i =0;i<istr1.length();i++)
        {
            
            //97~122是小寫的範圍 
            if(97<=istr1[i]&&istr1[i]<=122)
            {
                //count[0]表示 a 以此類推 
                //istr1[i]-'a'表示該字母的ascii減a的ascii 
                count[istr1[i]-'a']+=1;
            }
            
            //65~98是大寫的範圍 
            if(65<=istr1[i]&&istr1[i]<=90)
            {
                count[istr1[i]-'A']+=1;
            }
        }
        
        int odd=0;
        
        //判斷字母出現奇數次還是偶數次 
        for(int i=0;i<26;i++)
        {
            if(count[i]%2!=0)
            {
                odd++;
                if(odd==2)
                {
                    break;
                }
            }
        }
        
        //輸出 
        if(odd<2)
        {
            cout<<"yes !"<<endl;
        }
        else
        {
            cout<<"no..."<<endl;
        }
    }
    return 0;
}
arrow
arrow
    文章標籤
    高中生程式解題 python C++
    全站熱搜
    創作者介紹
    創作者 趴趴熊日常 的頭像
    趴趴熊日常

    資工趴趴熊的小天地

    趴趴熊日常 發表在 痞客邦 留言(0) 人氣()