实验八 字符串-小希练打字

如有不同思路,欢迎交流!!!
【问题描述】

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

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

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

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

【输入形式】

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

【输出形式】

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

【样例输入】

5
fdjkd
dFjdk
dfD
fdjkd
KkJjk
【样例输出】

61

注意:
1.本题已说明单位为0.1秒,则时间无需用float来定义求解,直接在0.4 0.2的基础上*10变成整数。
2.for(unsigned int i=0;i<left.size();i++)最好用unsigned int 来定义i,不然会有警告信息。

#include<iostream>
using namespace std;
int ctime(char a,char b)//判断前后两个字符是否都为同手侧输入 
{
	string left="qwertasdfgzxcvbQWERTASDFGZXCVB";
	string right="yuiophjklnmYUIOPHJKLNM";
	int anum=0,bnum=0;
	for(unsigned int i=0;i<left.size();i++)
	{
		if(a==left[i])
	      anum=1;
	    if(b==left[i])
	       bnum=1;
	}
	for(unsigned int j=0;j<right.size();j++)
	{
		if(a==right[j])
	      anum=2;
	    if(b==right[j])
	       bnum=2;
	}
	if(anum==bnum)
	  return 4;
	else 
	  return 2;
}
bool stime(string a[],string b,unsigned int m)//判断该字符串是否在之前已出现过 
{
	for(unsigned int i=0;i<m;i++)
	{
		if(b==a[i]) return true;
	}
	return false;
}
int main()
{
	int n;
	int sum=0;
	cin>>n;
	string a[n];
	for(int i=0;i<n;i++)
	  cin>>a[i];
	for(int i=0;i<n;i++)
	{
		int t=2;
		for(unsigned int j=1;j<a[i].size();j++)
		{
			t+=ctime(a[i][j-1],a[i][j]);
		}
		if(stime(a,a[i],i)) 
		  t/=2;
	    sum+=t;
	}
	cout<<sum;
	return 0;
 } 
  • 11
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值