庞果网:字符串的完美度
PS:庞果好久没出新题了。--!!。
题目:我们要给每个字母配一个1-26之间的整数,具体怎么分配由你决定,但不同字母的完美度不同, 而一个字符串的完美度等于它里面所有字母的完美度之和,且不在乎字母大小写,也就是说字母F和f的完美度是一样的。 现在给定一个字符串,输出它的最大可能的完美度。 例如:dad,你可以将26分配给d,25分配给a,这样整个字符串最大可能的完美度为77。
解析:77=26*2+25*1;得出规律——1和2分别为统计的字母个数,26和25的意思是根据26来递减(每次递减1),而且大的必须乘上数量大的字母(在这题中d为2,a为1,则2必须*26,25*1,这样才能最大)。
代码如下:
int perfect(const char *s)
{
int temp[26]={
0
};
int num=26;
int sum=0;
int i,j,k;
for(i=0;s[i];i++)//字母放入其位置
{
if(s[i]>='A'&&s[i]<='Z')
{
temp[s[i]+32-97]++;
}
else temp[s[i]-97]++;
}
for(i=0;i<26;i++)//排序大到小
{
k=i;
for(j=i+1;j<26;j++)
{
if(temp[j]>temp[k])
{
k=j;
}
}
if(k!=i)
{
int p=temp[i];
temp[i]=temp[k];
temp[k]=p;
}
}
for(i=0;i<26;i++)//求和26*n+25*m
{
if(temp[i])
{
sum+=temp[i]*num;
num--;
}
}
return sum;
}