名字的漂亮度/华为机试(C/C++)

本文介绍了一个计算名字漂亮度的程序,通过将名字中各字母的漂亮度相加得出总分。程序读取多个名字,输出每个名字的最大可能漂亮度。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目描述

给出一个名字,该名字有26个字符串组成,定义这个字符串的“漂亮度”是其所有字母“漂亮度”的总和。 
每个字母都有一个“漂亮度”,范围在1到26之间。没有任何两个字母拥有相同的“漂亮度”。字母忽略大小写。 
给出多个名字,计算每个名字最大可能的“漂亮度”。 

输入描述:

整数N,后续N个名字

输出描述:

每个名称可能的最大漂亮程度

示例1

输入

2
zhangsan
lisi

输出

192
101

代码:

//第四十三题  名字的漂亮度
#include<iostream>
#include<string>
#include<vector>
#include<algorithm>
using namespace std;
int main()
{
	int nName;
	while (cin >> nName)
	{
		vector<string>vNames;
		string temp;
		for (int i = 0; i < nName; i++)
		{
			cin >> temp;
			vNames.push_back(temp);
		}
		size_t iMax = vNames.size();
		for (int i = 0; i < iMax; i++)
		{
			vector<int>vNum;
			int pNum[26]{ 0 };
			int sum = 0;
			size_t iLength = vNames[i].length();
			for (int j = 0; j < iLength; j++)
			{
				if (isupper(vNames[i][j]))
					pNum[vNames[i][j] - 'A']++;
				else if (islower(vNames[i][j]))
					pNum[vNames[i][j] - 'a']++;
				else
					cout << "error" << endl;
			}
			for (int k = 0; k < 26; k++)
				if (pNum[k])
					vNum.push_back(pNum[k]);
			sort(vNum.begin(), vNum.end(), isgreater<int,int>);
			size_t kMax = vNum.size();
			for (int k = 0; k < kMax; k++)
				sum += (26 - k)*vNum[k];
			cout << sum << endl;
		}
	}
	return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值