编程练习:名字的漂亮度
Posted Disen
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了编程练习:名字的漂亮度相关的知识,希望对你有一定的参考价值。
题目来源:华为OJ
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 }
以上是关于编程练习:名字的漂亮度的主要内容,如果未能解决你的问题,请参考以下文章