2011年7月22日 星期五

c012: Tell me the frequencies!

內容 :
    給你一列文字,請你找出各字元出現的次數。

輸入說明 :
    每筆測試資料一列。每列最大長度為1000。

輸出說明 :
    對每一列輸入,請輸出各字元的ASCII值及其出現的次數。請根據出現的次數由小到大輸出。如果有2個以上的字元有相同的次數,則ASCII值較大的先輸出。 測試資料間請空一列,參考Sample Output

範例輸入 :
AAABBC
122333

範例輸出 :
67 1
66 2
65 3

49 1
50 2
51 3

出處 :
ACM 10062

PS:要注意讀入時要包含空格 && 最後一行下面只能有一行換行不能有2行 在ACM會錯

程式碼 :
#include<stdio.h>

int main()
{
    int n,top,i,j,temp,check;
    char s[1001],ctemp;
    char arr1[1000];
    int arr[1000];
    
    check = 0;
    while(gets(s)!=NULL)
    {
        if(check == 0)
            check = 1;
        else
            printf("\n");
        top = 0;
        for(i=0; s[i]!='\0'; i++)
        {
            for(j=0; j<top; j++)
                if(s[i] == arr1[j])
                {
                    arr[j]++;
                    break;
                }
            if(j == top)
            {
                top++;
                arr1[j] = s[i];
                arr[j] = 1;
            }
        }
        for(i=0; i<top; i++)
            for(j=i+1; j<top; j++)
                if((arr[i] > arr[j]) || (arr[i] == arr[j]) && (arr1[i] < arr1[j]))
                {
                    temp = arr[i];
                    arr[i] = arr[j];
                    arr[j] = temp;
                    
                    ctemp = arr1[i];
                    arr1[i] = arr1[j];
                    arr1[j] = ctemp; 
                }
        for(i=0; i<top; i++)
            printf("%d %d\n",arr1[i],arr[i]);
    }
    return 0;
}


http://zerojudge.tw/ShowProblem?problemid=c012

沒有留言:

張貼留言