【C++】度度熊的暗语-百度机试题-C++学习笔记

度度熊的暗语


Problem Description

我们都知道,地球上有一种神秘的生物———程序猿;

但是,也许你不知道,还有一种更神秘的生物:度度熊!


度度熊的神秘之处在于他只说暗语,暗语由一串英文字母组成(‘a'到’z',以及由‘A'到’Z“)。


假设:

一、字母‘a’代表的值为1(即value(a)==1,‘b’为2,......,‘z’为26;

二、1一大写字母相当于其对应的2个小写字母,如bBb和bbbb是等价的;

三、如果出现连续的相同自负,如aaaa......(连续k个a),这k个a的总权值会编程k*k*value(a);比如,如bBb与bbbb,它们所对应的总权值都是4*4*2=32.


你能计算出度度熊暗语的权值吗?

Input

输入数据第一行是一个正整数T(T<=1000),表示有T测试数据。

接下来T行,每行一句度度熊的暗语,即仅由大小写英文字母构成的字符串,字符串的长度最多为10000.

Output

对于每组数据,请输出一个数字,代表度度熊暗语对应的权值;

每组输出占一行。


以下是本人写的代码,如有错误尽请指正。

/*
 * stream.cpp
 *
 *  Created on: 2015年4月16日
 *      Author: CXH
 */

#include <iostream>
#include <vector>


#define testmaxnum 1000//输入的字符个数不超过
#define stringmaxnum 10000//输入的单个字符长度不超过
using namespace std;


int main()
{

	int testnum;
	cin>>testnum;//从键盘输入T测试数据
	if(testnum>1000)
	{
		cout<<"输入的字符个数不超过"<<testmaxnum<<endl;
		return 0;
	}

	vector<string> svec;
	while(testnum--)
	{
		string str;
		cin>>str;//从键盘输入单个字符串
		if(str.length()>10000)
		{
			cout<<"输入的单个字符长度不超过"<<stringmaxnum<<endl;
			return 0;
		}
		svec.push_back(str);
	}
	string str2;
	int qtemp=0,dtemp=0;//qtemp代表前一个字母所代表的值,dtemp代表当前字母所代表的值'a'=1,'b'=2...
	int cfk=0;//连续重复小写字母的数量
	int zm=1;//大写字母时为2,小写字母时为1
	int qzv=0;//权值vlaue
	for (vector<string>::iterator vecstart=svec.begin();  vecstart!=svec.end(); vecstart++) {
		str2=*vecstart;
		for (string::size_type i = 0;i < str2.length();i++) {
			if(str2[i]>='A'&&str2[i]<='Z')//当字母为大写时
			{
				dtemp=str2[i]-'a'+1+32;
				zm=2;
			}else if(str2[i]>='a'&&str2[i]<='z')//当字母为小写时
			{
				dtemp=str2[i]-'a'+1;
				zm=1;
			}else {
				cout<<"容器中输入数据错误!输入仅由大小写英文字母构成的字符串!"<<endl;
				return 0;
			}
			if(qtemp==dtemp)//当当前字母与前一字母重复时
			{
				cfk=cfk+zm;
			}else {//当当前字母与前一字母不重复时
				qzv=qzv+cfk*cfk*qtemp;
				cfk=zm;
				qtemp=dtemp;
			}
			if(i==str2.length()-1)//当遍历到最后一个字母时
			{
				qzv=qzv+cfk*cfk*dtemp;
			}

		}
		cout<<qzv<<endl;
		/*
		 * 输出一串暗语后初始化各值
		 */
		qtemp=0;
		dtemp=0;
		cfk=0;
		zm=1;
		qzv=0;
	}

	return 1;
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值