輸入一串字串,由小到大輸出各字元出現的頻率,若相同則ASCII大者放前面
[心得]
1.思考很亂,最後參考sagit大的想法,若出現過則break,沒出現則新增
2.掃過一次之後再檢查頻率,若小於前面出現過的字元或相等但ASCII較大則交換位置
2. if(cnt>0) printf("\n"); 擺放的位置超怪,沒想到要這樣才能過,卡題了很久 = ="
#include <stdio.h>
#include <string.h>
void swap(int *i,int *j)
{
int temp;
temp=*i;
*i=*j;
*j=temp;
}
int main()
{
char input[1002];
int cnt=0;
while(gets(input)!=NULL)
{
int freq[128]={0};
int sort[128]={0};
int len,i,j,k;
int n=0;
if(cnt>0) printf("\n");
len=strlen(input);
for(i=0;i<len;i++)
{
for(j=0;j<n;j++) /* check redundant */
if((sort[j]==input[i])) break;
if(j<n) freq[j]++;
/* first appearance */
else
{
sort[n]=input[i];
freq[n]=1;
n++;
}
}
for(i=0;i<n;i++)
{
for(j=i+1,k=i;j<n;j++)
if((freq[j]<freq[k])||((freq[j]==freq[k])&&(sort[j]>sort[k]))) k=j;
if(k!=i)
{
swap(&freq[i],&freq[k]);
swap(&sort[i],&sort[k]);
}
printf("%d %d\n",sort[i],freq[i]);
}
cnt++;
}
return 0;
}