不计大小写,每个字母都有一个“美丽程度”,是1-26之间的数值,一一对应,具体字母与数字的对应关系未知,给定一个字符串,求其可能的最大美丽程度。
统计频率,排序,频率大的分配26,第二大的分配25,。。。
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <string.h>
int bety(const char *str);
int cmp(const void*p1, const void*p2);
int main()
{
int n;
int *re=malloc(n*sizeof(re));
int i=0;
int n1;
scanf("%d", &n);
n1=n;
while(n--)
{
char s[256];
scanf("%s", s);
re[i]=bety(s);
i++;
}
for(i=0;i<n1;i++)
printf("%d\n", re[i]);
free(re);
getchar();
return 0;
}
int cmp(const void*p1, const void*p2)
{
return *(int*)p1 > *(int*)p2?(-1):(*(int*)p1 < *(int*)p2 ?1:0);
}
int bety(const char *str)
{
int n=strlen(str);
int count[26];
int i;
int x=26;
int s=0;
memset(count, 0, 26*sizeof(int) );
for(i=0;i<n;i++)
{
if(isalpha(str[i]))
count[tolower(str[i])-'a']++;
}
qsort(count, 26, 4, cmp);
for(i=0; count[i]!=0 && i<n; i++)
{
s = s + x*count[i];
x--;
}
return s;
}
input.txt:
4
Chenming
jijieshuoaini
counttolowerstr
forstrlenintcmpreturn
administrator@ubuntu:~/signal$ gcc test.c -o test
administrator@ubuntu:~/signal$ ./test
3
achaichc
chasichflcvn
hcaishfca;hfca
199
275
314
administrator@ubuntu:~/signal$ ./test <input.txt
187
301
341
459
administrator@ubuntu:~/signal$