C语言 完美字符串

时间:2023-05-04 13:41:56
约翰认为字符串的完美度等于它里面所有字母的完美度之和。每个字母的完美度可以由你来分配,不同字母的完美度不同,分别对应一个1-26之间的整数。
约翰不在乎字母大小写。(也就是说字母F和f)的完美度相同。给定一个字符串,输出它的最大可能的完美度。例如:dad,你可以将26分配给d,25分配给a,这样整个字符串完美度为77。
 1 #include <stdio.h>
#include <string.h>
#define N 10000
/*
1.把大写字母转换成小写字母
2.统计各个字母出现的次数
3.将最大的*26,其他以此减少*
4.相加输出结果
*/
int input(char s[]);
void transfer(char s[],int n);
int getCNT(int cnt[],char s[],int n);
void sort(int cnt[]);
int main()
{
char s[N];
int n,cnt[]={};
int i,j=,perfect=;
//printf("请输入测试字符串:\n");
n=input(s);
transfer(s,n);
getCNT(cnt,s,n);
sort(cnt);
for(i='a';i<='z';i++)
{
perfect+=cnt[i]*j;
j--;
}
printf("%d",perfect);
}
int input(char s[])
{
int i=-;
do{
i++;
scanf("%c",&s[i]);
}while(s[i]!='\n');
return i;
}
void transfer(char s[],int n)
{
int i;
for(i=;i<n;i++)
if(s[i]>='A'&&s[i]<='Z')
s[i]+=;
}
int getCNT(int cnt[],char s[],int n)
{
int i,j;
for(i=;i<n;i++)
{
for(j='a';j<='z';j++)
if(s[i]==j)
cnt[j]++;
}
}
void sort(int cnt[])
{
int i,j;
int temp,maxIndex;
for(i='a';i<'z';i++)
{
maxIndex=i;
for(j=i+;j<='z';j++)
if(cnt[j]>cnt[maxIndex])
maxIndex=j;
if(maxIndex!=i)
{
temp=cnt[i];
cnt[i]=cnt[maxIndex];
cnt[maxIndex]=temp;
}
}
}