做了几遍 不是格式错误就是答案错误 = = 是输入的格式不对。最后终于成功了。
下面的程序在电脑上可以正常运行。
总结一下:既然用到了algorithm的sort函数 就不需要用冒泡排序了 直接进行sort即可。
利用ctype.h的tolower函数将大写字母转化为小写字母。 然后利用小写字母和数字之间的ASCII码关系进行数列序数的变换。
#include<string>
#include<vector>
#include<sstream>
#include<algorithm>
using namespace std;
int maxbeauty(string len){//先将字符串排序 然后计算有多少种字母,各有多少个。对个数进行从大到小的冒泡排序,然后求得最大美丽值。
sort(len.begin(), len.end());
int beauty[26];
for (int i = 0; i < 26; i++){
beauty[i] = 1;
}
int j = 0;
for (int i = 1; i < len.size() ; i++){
if (len[i] == len[i - 1]){
beauty[j] = beauty[j] + 1;
}
else{
j++;
}
}
int temp = 0;
for (int i = 0; i < j + 1; i++){
for (int k = 0; k < j + 1 - i; k++){
if (beauty[k] < beauty[k + 1]){
temp = beauty[k];
beauty[k] = beauty[k + 1];
beauty[k + 1] = temp;
}
}
}
int be= 0;
for (int i = 0; i < j +1; i++){
be = be + beauty[i] * (26 - i);
}
return be;
}
/*void main(){
int a;
cin >> a;
string str, word;//用字符串流的方式来处理输入数据
getline(cin, str);
stringstream istr(str);
while (istr >> word){
int b = maxbeauty(word);
cout << b <<endl;
}
//system("pause");
return;
}*/
/*void main(){
//cout << "输入:" << endl;
int n, i;
string s;
cin >> n;
int *len = new int[n];
for (i = 0; i < n; i++){
cin >> s;
len[i] = maxbeauty(s);
}
cout << endl << "输出:" << endl;
for (i = 0; i < n; i++)
cout << len[i] << endl;
system("pause");
}*/
void main()
{
string str, name;
int n;
int b;
cin >> n;
for (int i = 1; i <= n; i++){
cin>>name;
b = maxbeauty(name);
cout << b << endl;
}
system("pause");
return ;
}
下面贴几个从别处转来的程序
huhuichun:
#include<iostream>
#include<algorithm>
#include<ctype.h>
using namespace std;
int Beauty(char a[]) //计算一个字符串的最大漂亮度
{
int b[26]={0}; //存储每个字符的个数
int sum=0;
for(int i=0; a[i]!='\0'; i++)
a[i]=tolower(a[i]); //全部先转换成小写
for(int i=0; a[i]!='\0'; i++)
b[a[i]-97]++;
sort(b,b+26);
for(int i=25; i>=0; i--)
sum+=(i+1)*b[i];
return sum;
}
int main()
{
int M;
char array[100][100];
cin>>M;
getchar(); //清除回车
for(int i=0;i<M;i++)
gets(array[i]);
for(int i=0;i<M;i++)
cout<<Beauty(array[i])<<endl;
return 0;
}
- #include<iostream>
- #include<string>
- using namespace std;
- int meili(string s){
- int a[26] = { 0 };
- int l = s.size(),pos;
- int i, j,temp,len=0;
- for (i = 0; i < l; i++){
- if (isupper(s[i]))
- pos = s[i] - 65;
- else
- pos = s[i] - 97;
- a[pos]++;
- }
- for (i = 0; i < 25; i++){
- for (j = 0; j < 25 - i; j++){
- if (a[j] < a[j + 1]){
- temp = a[j];
- a[j] = a[j + 1];
- a[j + 1] = temp;
- }
- }
- }
- for (i = 0; a[i] != 0&&i<26; i++)
- len += (26 - i)*a[i];
- return len;
- }
- void main(){
- cout << "输入:"<<endl;
- int n,i;
- string s;
- cin >> n;
- int *len = new int[n];
- for (i = 0; i < n; i++){
- cin >> s;
- len[i] = meili(s);
- }
- cout <<endl<< "输出:" << endl;
- for (i = 0; i < n; i++)
- cout << len[i] << endl;
- system("pause");
- }
- #include <iostream>
- #include <string>
- #include <algorithm>
- using namespace std;
- int main()
- {
- void pretty_name();
- string str,name;
- int n;
- cin>>n;
- for (int i=1;i<=n;i++)
- pretty_name();
- return 0;
- }
- void pretty_name()
- {
- string name;
- int num[26]={0},pretty=0;
- cin>>name;
- for (int i=0;i<name.length();i++)
- switch(name[i])
- {
- case 'a':num[0]++;break;
- case 'b':num[1]++;break;
- case 'c':num[2]++;break;
- case 'd':num[3]++;break;
- case 'e':num[4]++;break;
- case 'f':num[5]++;break;
- case 'g':num[6]++;break;
- case 'h':num[7]++;break;
- case 'i':num[8]++;break;
- case 'j':num[9]++;break;
- case 'k':num[10]++;break;
- case 'l':num[11]++;break;
- case 'm':num[12]++;break;
- case 'n':num[13]++;break;
- case 'o':num[14]++;break;
- case 'p':num[15]++;break;
- case 'q':num[16]++;break;
- case 'r':num[17]++;break;
- case 's':num[18]++;break;
- case 't':num[19]++;break;
- case 'u':num[20]++;break;
- case 'v':num[21]++;break;
- case 'w':num[22]++;break;
- case 'x':num[23]++;break;
- case 'y':num[24]++;break;
- case 'z':num[25]++;break;
- case 'A':num[0]++;break;
- case 'B':num[1]++;break;
- case 'C':num[2]++;break;
- case 'D':num[3]++;break;
- case 'E':num[4]++;break;
- case 'F':num[5]++;break;
- case 'G':num[6]++;break;
- case 'H':num[7]++;break;
- case 'I':num[8]++;break;
- case 'J':num[9]++;break;
- case 'K':num[10]++;break;
- case 'L':num[11]++;break;
- case 'M':num[12]++;break;
- case 'N':num[13]++;break;
- case 'O':num[14]++;break;
- case 'P':num[15]++;break;
- case 'Q':num[16]++;break;
- case 'R':num[17]++;break;
- case 'S':num[18]++;break;
- case 'T':num[19]++;break;
- case 'U':num[20]++;break;
- case 'V':num[21]++;break;
- case 'W':num[22]++;break;
- case 'X':num[23]++;break;
- case 'Y':num[24]++;break;
- case 'Z':num[25]++;break;
- }
- sort(num,num+26);
- for (int i=0;i<26;i++)
- pretty=pretty+(i+1)*num[i];
- cout<<pretty<<endl;
- }
- #include <iostream>
- #include <stdio.h>
- #include <cstring>
- #include <stdlib.h>
- #define length 30
- #define row 20
- #define alphabat 26
- using namespace std;
- void bijiao(int count,char str[][length]);
- int main()
- {
- char str[row][length] = {};
- int i = 0;
- int count;
- cin>>count;
- for(i = 0;i < count;i++)
- {
- cin>>str[i];
- }
- bijiao(count,str);
- return 0;
- }
- void bijiao(int count,char str[][length])
- {
- int i = 0,j = 0;
- int k = 0,l = 0;
- int counter[alphabat] = {0};
- int temp = 0;
- int result = 0;
- for(i = 0;i < count;i++)
- {
- for(j = 0;j < length;j++)
- {
- switch(str[i][j])
- {
- case 'a':counter[0]++;break;
- case 'A':counter[0]++;break;
- case 'b':counter[1]++;break;
- case 'B':counter[1]++;break;
- case 'c':counter[2]++;break;
- case 'C':counter[2]++;break;
- case 'd':counter[3]++;break;
- case 'D':counter[3]++;break;
- case 'e':counter[4]++;break;
- case 'E':counter[4]++;break;
- case 'f':counter[5]++;break;
- case 'F':counter[5]++;break;
- case 'g':counter[6]++;break;
- case 'G':counter[6]++;break;
- case 'h':counter[7]++;break;
- case 'H':counter[7]++;break;
- case 'i':counter[8]++;break;
- case 'I':counter[8]++;break;
- case 'j':counter[9]++;break;
- case 'J':counter[9]++;break;
- case 'k':counter[10]++;break;
- case 'K':counter[10]++;break;
- case 'l':counter[11]++;break;
- case 'L':counter[11]++;break;
- case 'm':counter[12]++;break;
- case 'M':counter[12]++;break;
- case 'n':counter[13]++;break;
- case 'N':counter[13]++;break;
- case 'o':counter[14]++;break;
- case 'O':counter[14]++;break;
- case 'p':counter[15]++;break;
- case 'P':counter[15]++;break;
- case 'q':counter[16]++;break;
- case 'Q':counter[16]++;break;
- case 'r':counter[17]++;break;
- case 'R':counter[17]++;break;
- case 's':counter[18]++;break;
- case 'S':counter[18]++;break;
- case 't':counter[19]++;break;
- case 'T':counter[19]++;break;
- case 'u':counter[20]++;break;
- case 'U':counter[20]++;break;
- case 'v':counter[21]++;break;
- case 'V':counter[21]++;break;
- case 'w':counter[22]++;break;
- case 'W':counter[22]++;break;
- case 'x':counter[23]++;break;
- case 'X':counter[23]++;break;
- case 'y':counter[24]++;break;
- case 'Y':counter[24]++;break;
- case 'z':counter[25]++;break;
- case 'Z':counter[25]++;
- }
- }
- for(k = 1;k < alphabat;k++)
- {
- for(l = k;l > 0;l--)
- {
- if(counter[l] > counter[l-1])
- {
- temp = counter[l];
- counter[l] = counter[l-1];
- counter[l-1] = temp;
- }
- }
- }
- for(k = 0;k < alphabat;k++)
- {
- result += counter[k] * (alphabat - k);
- }
- cout<<result<<endl;
- result = 0;
- for(k = 0;k < alphabat;k++)
- {
- counter[k] = 0;
- }
- }
- }