题目描述:
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;
}