救命啊,C语言老师发的题
先统计每个字母出现的次数,出现次数最多的分配最大的完美数。
代码如下:
#include <stdio.h>
int main()
{
char buf[1000]={0};
int a[26],i,j,index,t,s=0,ff=26;
for(i=0;i<26;i++)
a[i] = 0;
gets(buf); //读取字符串
i = 0;
while(buf[i] !='\0')
{
if(buf[i]>='a' && buf[i]<='z')
{
index = buf[i] - 'a';
a[index]++;
}else if(buf[i]>='A' && buf[i]<='Z')
{
index = buf[i] - 'A';
a[index]++;
}
i++;
}
//按出现的次数排序
for (i=0;i<25;i++)
{
for(j=0;j<25-i;j++)
{
if(a[j] < a[j+1])
{
t = a[j];
a[j]=a[j+1];
a[j+1]=t;
}
}
}
//计算
for (i=0;i<26;i++)
{
s += ff * a[i];
ff--;
}
printf("%d",s);
return 0;
}