某企业笔试题目0723记录

题目描述:

numeric keypad time

输入:1、随机的3*3数字键盘;【字符串形式】2、一行数字【字符串形式】;

输出:录入数字时敲击键盘所用时间

规则:按照八邻域为相邻关系,相邻关系的键盘之间移动为1秒,非相邻关系按照最近邻的规则需要移动的步数为秒数。

【题目为英文描述,读题耗时30min。。。紧张情绪也拖后腿。。。】

【后记:语言规则一定要熟悉,前后加起来一道题目做了三个小时才真正完成,课题只用matlab不用C++,以后日常练习要加强】

#include <bits/stdc++.h>
#include <math.h>
#include <numeric>
using namespace std;

int entrytime(string s, string keypad){
	int slength;
	int keypadlength;
	int keybordloc[9][2];
		int entrytime=0;
	slength=s.length();
	keypadlength=keypad.length();
	
	if (keypadlength==9)
	{
		//1:GET XY LOC
		int X[slength];
		int Y[slength];

		for (int i = 0; i < slength; i++)
{
	for(int j=0;j<keypadlength;j++)
	{
		if (s[i]==keypad[j])
		{
			X[i]=j/3+1;
			Y[i]=j+1-X[i]*3;
				std::cout << "i"<<i<< "\n";
				std::cout << "X[i]="<<X[i]<< "\n";
				std::cout << "Y[i]="<<Y[i]<< "\n";
		}
	}
}
	//2:CACU DIS

int sleng=slength-1;
int Xdis[sleng];	
int Ydis[sleng];	
int dis[sleng];	
int time[sleng];

		for (int k = 0; k < sleng; k++)
		{
				Xdis[k]=X[k+1]-X[k];
				Ydis[k]=Y[k+1]-Y[k];
				dis[k]=pow((pow(Xdis[k],2)+pow(Ydis[k],2)),0.5);
				/*debuging-show-mid-outpput
				std::cout << "k="<<k<< "\n";
				std::cout << "X[k+1]="<<X[k+1]<< "\n";
				std::cout << "X[k]="<<X[k]<< "\n";
				std::cout << "Y[k+1]="<<Y[k+1]<< "\n";
				std::cout << "Y[k]="<<Y[k]<< "\n";
								
				std::cout << "Xdis[k]="<<Xdis[k]<< "\n";
				std::cout << "Ydis[k]="<<Ydis[k]<< "\n";
			*/
					std::cout << "dis[k]="<<dis[k]<< "\n";
				if(dis[k]>0) {
						if(dis[k]<2) {
				time[k]=1;
				}
				else{
					if(dis[k]<3)
				time[k]=2;
				}	
				}
				else{
					time[k]=0;
				}
				entrytime=	entrytime+time[k];
					std::cout << "time[k]="<<time[k]<< "\n";
						std::cout << "entrytime="<<entrytime<< "\n";
		}
}
	else{
		std::cout << "wrong keybord";
	}
	return entrytime;
} 


int main(){
	string s;
	getline(cin,s);
	string keypad;
	getline(cin,keypad);
	int result =entrytime(s,keypad);
	std::cout << result << "\n";
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

破破2

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值