华为机试:名字的漂亮度
2015-09-01 20:53
351 查看
题目描述:
代码实现:
描述 | 给出一个名字,该名字有26个字符串组成,定义这个字符串的“漂亮度”是其所有字母“漂亮度”的总和。 每个字母都有一个“漂亮度”,范围在1到26之间。没有任何两个字母拥有相同的“漂亮度”。字母忽略大小写。 给出多个名字,计算每个名字最大可能的“漂亮度”。 |
---|---|
知识点 | 字符串 |
运行时间限制 | 0M |
内存限制 | 0 |
输入 | 整数N,后续N个名字 N个字符串,每个表示一个名字 |
输出 | 每个名称可能的最大漂亮程度 |
样例输入 | 2 zhangsan lisi |
样例输出 | 192 101 |
#include <iostream> #include <string> #include <stdlib.h> #include <vector> using namespace std; int main() { int i = 0,nNumbers = 0; char szName[100] = {0}; int nNameLens = 0; int nSum = 0; int data[26] = {0}; int j = 0,k = 0,nTemp = 0; cin >> nNumbers; while(nNumbers--) { cin >> szName; nSum = 0; nNameLens = strlen(szName); for(i = 0; i < nNameLens; i++) { /* 大写字母转换为小写字母 */ if(szName[i] >= 'A' && szName[i] <= 'Z') { szName[i] = szName[i] + 32; } data[szName[i] - 'a']++; } /*对数组从大到小排序,采用冒泡排序*/ for(j = 0;j < 25; j++) { for(k = j+1; k < 26; k++) { if(data[k] > data[j]) { nTemp = data[k]; data[k] = data[j]; data[j] = nTemp; } } } for(i = 0; i < 26; i++) { if(data[i] == 0) { break; } nSum = nSum + (26-i)*data[i]; /* 清空这个数组 */ data[i] = 0; } cout << nSum << endl;; } return 0; }
相关文章推荐
- ARM汇编指令:adr和ldr的前因后果
- _beginthreadex和_beginthread区别,调用_endthread不会析构局部变量??
- spring的@ModelAttribute作用
- 字符串同构的最小表示方法
- javascript 之闭包
- 找出单链表的倒数第K个(从1开始计数)结点的值
- Hibernate知识点汇总
- OpenCV2:Mat
- 31 Next Permutation
- 杭电OJ-2032_杨辉三角
- jquery中的多条件选择,相对选择和层次选择
- UGUI基本控件(二)
- Android问题集(二)——TextView在点击时显示不同颜色,Button点击效果
- ImageJ二次开发学习纪录之初步体会
- 反转一个链表并输出各个结点的值
- oracle查看表占用磁盘空间
- 省市联动
- ajax异步请求
- Spring AOP 静态代理与动态代理
- POJ 1741 Tree(树分治)