小希练打字—字符串

【问题描述】

小希打字太慢了,因此他在苦练打字技巧。他用了一个教学 App,可以一个个显示自己打出来的英文单词。 

当小希输入一个词时,他需要花0.2 秒输入第一个字母。而对于接下来的每个字母,如果在标 准指法下和前一个字母使用同侧手输入,则需要 0.4 秒;否则只需 0.2 秒。输入一个词所需的时间 为输入每个字母所需时间之和。不过,如果小希之前练过这个词,那么所需的时间可以降为初次 输入时的一半。

小希输入的内容只包含26个英文字符(区分大小写),字符要求按照标准指法规定输入,其中"qwertasdfgzxcvb"这15个字符为左手字符,“yuiophjklnm”这11个字符为右手字符。 

给定小希在练习中依次输入的词,请计算小希的总耗时。

【输入形式】

每组数据的第一行包含一个整数 N。接下来 N 行,每行包含一个字符串,代表小希输入的词。

【输出形式】

对于每组数据,输出一行,包含一个整数,代表小希的总耗时,单位为十分之一秒。

【样例输入】

5
fdjkd
dFjdk
dfD
fdjkd
KkJjk

【样例输出】

61
#include<iostream>
#include<string>
using namespace std;
string str_left="qwertasdfgzxcvbQWERTASDFGZXCVB";
string str_right="yuiophjklnmYUIOPHJKLNM";
bool left_find(char a)
{
	for(char c:str_left)
	{
		if(a==c)
		{
			return true;
		}
	}
	return false;
}
bool right_find(char b)
{
	for(char c:str_right)
	{
		if(b==c)
		{
			return true;
		}
	}
	return false;
}
bool same_ce(char a,char b)
{
	if((left_find(a)==true&&left_find(b)==true)||(right_find(a)==true&&right_find(b)==true))
	{
		return true;
	}
	return false;
}
int main()
{
	int n;cin>>n;
	string*str=new string[n];
	for(int i=0;i<n;i++)
	{
		cin>>str[i];
	}
	double*result=new double[n];
	for(int i=0;i<n;i++)
	{
		result[i]=0;
	 } 
	for(int i=0;i<n;i++)
	{
		double sum_time=0.2;
		for(unsigned int j=1;j<str[i].length();j++)
		{
			if(same_ce(str[i][j],str[i][j-1])==true)
			{
				sum_time=sum_time+0.4;
			}
			else
			{
				sum_time=sum_time+0.2;
			}
		}
		result[i]=sum_time;
	}
	//建立一个标志来记录这个数是否已经被减去过 ,初始化为 0 
	int*sign=new int[n];
	for(int i=0;i<n;i++)
	{
		sign[i]=0;
	}
	for(int i=0;i<n;i++)
	{
		for(int j=i+1;j<n;j++)
		{
			if(str[j]==str[i] && sign[j]!=1)
			{
				result[j]=0.5*result[i];
				sign[j]=1;
			}
		}
	}
	double sumsum_time=0.0;
	for(int i=0;i<n;i++)
	{
		sumsum_time=sumsum_time+result[i];
	} 
	cout<<10*sumsum_time;
	delete []str;
	delete []result;
	delete []sign;	
 } 

先建立两个全局变量,注意注意注意要将大写也放进去(因为本人没放大写就卡了好长时间,最后才反应过来),然后弄两个bool函数,判断是否在一只手,因为第一个字母打完才判断下面一个字母和上一个字母是否在同一只手,所以接下来的判断是从第二个元素开始的。

还有切记注意注意再注意,题目要求“有两个相同单词的时候再时间减少为第一次的一半,不是字母不是字母!!!”

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值