2014年7月14日 星期一

uva 10008 What's Cryptanalysis

用陣列計算字母出現的次數,並把第一次出現的字母存到另一個陣列,在 sort 和顯示時,可

以用來做 map。

注意:qsort 的 compare function 的 return value,value < 0 : 不交換,value >= 0 : 交換。


#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>

int alphabet[300]={0};

int compare(const void *a, const void*b){
    int aa,bb;
    aa=*(int*)a;
    bb=*(int*)b;

    if(alphabet[aa] < alphabet[bb]){
        return 1;
    }else if(alphabet[aa] == alphabet[bb]){
        if(aa > bb) return 1;
    }

    return -1;
}

int main(void){
    int lines,i,j,tmp;
    char input[10000],c;
    int order[26],top;

    while(scanf("%d%c",&lines,&c)!=EOF){
        memset(alphabet,0,sizeof(alphabet));
        top=-1;

        for(i=0;i<lines;i++){
            fgets(input,10000-1,stdin);
            for(j=0;input[j]!='\n';j++){
                tmp=toupper(input[j]);
                if(tmp >= 'A' && tmp <='Z'){
                    ++alphabet[tmp];

                    if(alphabet[tmp]==1){
                        order[++top]=tmp;
                    }
                }
            }
        }

        qsort(order,top+1,sizeof(int),compare);

        for(i=0;i<=top;i++){
            printf("%c %d\n",order[i],alphabet[order[i]]);
        }
    }


    return 0;
}

沒有留言:

張貼留言