题目详情
我们要给每个字母配一个1-26之间的整数,具体怎么分配由你决定,但不同字母的完美度不同,
而一个字符串的完美度等于它里面所有字母的完美度之和,且不在乎字母大小写,也就是说字母F和f的完美度是一样的。
现在给定一个字符串,输出它的最大可能的完美度。
例如:dad,你可以将26分配给d,25分配给a,这样整个字符串最大可能的完美度为77。
函数头部
C
int perfect(const char *s);
C++
int perfect(const string &s);
java
public static int perfect(String s);
#include <iostream>
#include <string>using namespace std;int perfect(const string &s);int main()
{while (true){string str;cout << "Please enter the characters : ";cin >> str;if (str == "0") break;int result = perfect(str);cout << "perfect result of " << result << endl;}return 0;
}int perfect(const string &s)
{int ia = (int)'a'; // 97int iA = (int)'A'; // 65int perfectNum = 0;string content = s;int config[26] = {0};// 获取字符的记录个数while (content.size()){char ch = content[0];while (true){int index = content.find(content[0]);if (index < 0) break;if ((int)content[0] < ia){// 大写内容config[(int)content[0] - iA] ++;}else{config[(int)content[0] - ia] ++;}content.erase(index, 1);}}// 将个数进行排序int i,j,t;for(i=0;i<25;i++){for(j=0;j<25-i;j++){if(config[j+1]>config[j]){t=config[j+1];config[j+1]=config[j];config[j]=t;}}}// 开始进行最大幸福数计算for(int i = 0, momey = 26; i < 26; i ++, momey --){perfectNum += config[i]*momey;}return perfectNum;
}
不知对错带指正,仅供交流!
以后要切记好好审题哦……
仅此一次,下次再不会在没有结束挑战之前放代码了。