您的位置:首页 > 其它

京东2016笔试题

2016-04-08 21:18 120 查看
2016.年4月8日7点到9点考题,两个编程题,就做出这一个了,第二个没时间了,感觉第二个编程题还好,不是很难)

题目大致意思就是给定一个8×8的棋盘,给定两个点A,B,求从A到B需要走的最短步数,并打印最短路径。

走的每一步的方向可以为左(L)、右(R)、上(U)、下(D)、左下(LD)、左上(LU)、右下(RD)、右上(RU)。

确定A到B的路径时,优先走斜的的路径,然后走直的。

比如从(5,1)到(8,8)

需要的最短步数为7,

分别为右上、右上、右上、上、上、上、上。

即输入

51

88

输出

7

RU

RU

RU

U

U

U

U

分析:

全面考虑各种情况,只有斜线的、只有直线的、直线斜线都有的(优先打印斜线)。

提交的通过的代码如下:

#include <stdlib.h>
#include <iostream>
using namespace std;
int main()
{
string s;
string t;
while(cin >> s >> t)
{

char startx = s[0];
char starty = s[1];
char endx = t[0];
char endy = t[1];
int dis_x = endx - startx;
int dis_y = endy - starty;
int ans = abs(dis_x)> abs(dis_y)?abs(dis_x):abs(dis_y);
string res;
cout << ans << endl;
//确定斜着走的方向
if(dis_x > 0 && dis_y > 0 )
res = "RU";
else if(dis_x > 0 && dis_y < 0)
res = "RD";
else if(dis_x < 0 && dis_y > 0)
res = "LU";
else if(dis_x < 0 && dis_y < 0)
res = "LD";
//最短路径只有斜着走的情况
if(abs(dis_x) == abs(dis_y))
{
for(int i = 0;i < abs(dis_x);i++)
cout << res << endl;
}
//最短路径只有上下的方向
else if(dis_x == 0)
{
if(dis_y > 0)
{
for( int i = 0;i < ans ;i++)
cout << "U" <<endl;
}

else
{
for( int i = 0;i < ans ;i++)
cout << "D" <<endl;
}
}
//最短路径只有左右的方向
else if(dis_y == 0)
{
if(dis_x > 0)
{
for( int i = 0;i < ans ;i++)
cout << "R" <<endl;
}

else
{
for( int i = 0;i < ans ;i++)
cout << "L" <<endl;
}
}
//最短路径有直线,也有斜线的情况
else
{
int temp = abs(dis_x) - abs(dis_y);
//题目要求优先走斜线
for(int i = 0;i< ans - abs(temp);i++)
cout << res << endl;
//然后计算直线
if(temp > 0)
{
if(dis_x > 0 )
{
for(int i = 0 ;i< temp; i++)
cout << "R" << endl;
}
else
{
for(int i = 0 ;i< temp ;i++)
cout << "L" << endl;
}
}
else
{
if(dis_y > 0 )
{
for(int i = 0 ;i< abs(temp); i++)
cout << "U" << endl;
}
else
{
for(int i = 0 ;i< abs(temp) ;i++)
cout << "D" << endl;
}
}
}
}

cout << "Hello world!" << endl;
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  京东