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

来源:互联网 发布:淘宝类目怎么编辑分类 编辑:程序博客网 时间:2024/06/14 06:18

度度熊的暗语


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,小写字母时为1int qzv=0;//权值vlauefor (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
原创粉丝点击