2015年3月10日 星期二

[UVA] 10008 - What's Cryptanalysis?

/*20150310 hanting*/
#include <iostream>
#include <algorithm>
using namespace std;
bool compare(pair<char,int> a,pair<char,int> b)
{
    if(a.second==b.second) return a.first<b.first;
    else return a.second>b.second;
}
int main()
{
    int N;
    cin>>N;
    cin.get();
    string str[N];
    string total="";
    for(int i=0;i<N;i++)
    {
        getline(cin,str[i]);
        for(int j=0;j<str[i].size();j++)
        {
            if(isalpha(str[i][j])) total+=toupper(str[i][j]);
        }
    }
    pair<char,int> letter[26];//< 字母 , 字母出現的次數 >
    for(int i=0;i<26;i++) letter[i].first=i+'A';
    for(int i=0;i<total.size();i++)
    {
        letter[total[i]-'A'].second++;
    }
    sort(letter,letter+26,compare);
    for(int i=0;letter[i].second;i++)//次數是0就停止輸出
    {
        cout<<letter[i].first<<" "<<letter[i].second<<endl;
    }
    return 0;
}
----------------------------------------

/* 20151012
 * hanting
 * UVa 10008 - What's Cryptanalysis?
 * C++
 */
#include <iostream>
#include <algorithm> //transform,sort
using namespace std;
struct Letter
{
    char ch;
    int cnt;
    Letter():cnt(0){}
    bool operator<(const Letter& another)const
    {
        return cnt>another.cnt or (cnt==another.cnt and ch<another.ch);
    }
};
int main()
{
    int N;
    while(cin>>N)
    {
        string str;
        cin.get();
        Letter letter[26];//A~Z
        for(int i=0;i<26;i++)
        {
            letter[i].ch='A'+i;
        }
        for(int i=0;i<N;i++)
        {
            getline(cin,str);
            transform(str.begin(),str.end(),str.begin(),::toupper);
            for(int i=0;i<str.size();++i)
            {
                if(isalpha(str[i])) letter[ str[i]-'A' ].cnt++;
            }
        }
        sort(letter,letter+26);
        for(int i=0;i<26;i++)
        {
            if(letter[i].cnt)
            {
                cout<<letter[i].ch<<" "<<letter[i].cnt<<endl;
            }
        }

    }
    return 0;

}

沒有留言:

張貼留言