1 // nameBeautyDegree.cpp : 定义控制台应用程序的入口点。
2 //
3
4 #include "stdafx.h"
5 #include <iostream>
6 #include <stdlib.h>
7 #include <string>
8 #include <map>
9 using namespace std;
10 //冒泡排序
11 void sort(int *array,size_t num)
12 {
13 size_t i,j,temp;
14 for(i=num;i>1;i--)
15 for(j=0;j<i-1;j++){
16 if(array[j]<array[j+1]){
17 temp=array[j];
18 array[j]=array[j+1];
19 array[j+1]=temp;
20 }
21 }
22 }
23 //计算一个名字的漂亮度
24 int nameValue(char* name)
25 {
26 map<char,int> myMap;//某个字母出现的次数
27 map<char,int>::iterator ite;
28 size_t size=strlen(name);//名字的长度
29 unsigned int i;//for循环
30 int chValue[50];//字符出现的次数
31 int k=26;//漂亮度
32 int nValue=0;//名字的漂亮度
33 //遍历名字中的字符,将字符及其出现的次数插入myMap中
34 for(i=0;i<size;i++){
35 ite=myMap.find(name[i]);
36 if(ite!=myMap.end())
37 ite->second+=1;
38 else
39 myMap.insert(pair<char,int>(name[i],1));
40 }
41 //得到所有字符出现的次数
42 ite=myMap.begin();
43 for(i=0;i<myMap.size();i++)
44 {
45 chValue[i]=ite->second;
46 ite++;
47 }
48 //对所有字符出现的次数进行排序
49 sort(chValue,myMap.size());
50 //计算名字的漂亮度
51 for(i=0;i<myMap.size()-1;i++){//i遍历次数为myMap.size()-1,因为最后一个字符是换行符
52 nValue+=(chValue[i])*k;
53 k--;
54 }
55 return nValue;
56 }
57 int main() {
58 unsigned int n;
59 unsigned int i;
60 cin>>n;//输入名字个数
61 if(n<=0)//个数小于0,返回
62 return 0;
63 int ch;
64 ch=getchar();//接收回车符
65 char name[10][50];//存放n个名字
66 //接收名字
67 for(i=0;i<n;i++)
68 {
69 fgets(name[i],50,stdin);//接收名字,以回车符作为结束标志,同时把回车符也送进了名字里,注意处理掉
70 }
71 //打印每个名字的漂亮度
72 for(i=0;i<n;i++)
73 cout<<nameValue(name[i])<<endl;//调用函数nameValue()
74 return 0;
75 }