庞果网:字符串的完美度

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;
}

 

posted @ 2013-10-22 21:42  小小Eason  阅读(186)  评论(0编辑  收藏  举报