京东2016实习生笔试题之走坐标


/*
 * 给定一个x轴a-h,y轴1-8的矩阵,从其中一点到另一点,求最短距离,每个点可以走它周围的8个方向,L,LU,U,RU,R,RD,D,LD.(L左。U上,R右,D下)
 * 
 * 
 * 解题:分为几种情况,1。当横坐标的差值大于纵坐标的差值,此时是从起点沿对角线走,走到与终点的y齐平是在往左或右走,直到终点。
 * 2当纵坐标大于横坐标,此时是从起点出发,沿对角线走,走到与终点x齐平再往上或往下走。直到终点。
 * 画个图就懂了,终点是思路,我脑子比较木,就用笨方法,写了不短的时间。主要是思路会混乱。
 * */
import java.util.*;
import java.math.*;
public class jingdong {
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
while(sc.hasNext()){
int t=0;
String s1=sc.nextLine();
String s2=sc.nextLine();
char[] a1=s1.toCharArray();
char[] a2=s2.toCharArray();
//将输入的值变成xy坐标
int x1=a1[0];
int x2=a2[0];
int y1=Integer.parseInt(a1[1]+"");
int y2=Integer.parseInt(a2[1]+"");
int xc=x1-x2;//横坐标差值
int yc=y1-y2;//纵坐标差值
 
//当横坐标的差值大于纵坐标的差值
if(Math.abs(xc)>Math.abs(yc)){
System.out.println(Math.abs(xc));
int temp1=Math.abs(yc);
//当纵坐标大于0,也就是 终点在起点的下边
if(yc>0){
if(xc>0){
//档横坐标差值大于0,也就是终点在起点的左边
for(int i=0;i<Math.abs(yc);i++)
System.out.println("LD");
int c=Math.abs(xc)-Math.abs(yc);
for(int i=0;i<c;i++)
System.out.println("L");
}
else{
//横坐标差值小于0,也就是终点在起点右边,下边同理,就不写了
for(int i=0;i<Math.abs(yc);i++)
System.out.println("RD");
int c=Math.abs(xc)-Math.abs(yc);
for(int i=0;i<c;i++)
System.out.println("R");
}
 
}
//纵坐标小于0
else{
//横坐标大于0
if(xc>0){
for(int i=0;i<Math.abs(yc);i++)
System.out.println("LU");
int c=Math.abs(xc)-Math.abs(yc);
for(int i=0;i<c;i++)
System.out.println("L");
}
else{
//横坐标小于0
for(int i=0;i<Math.abs(yc);i++)
System.out.println("RU");
int c=Math.abs(xc)-Math.abs(yc);
for(int i=0;i<c;i++)
System.out.println("R");
}
 

}
else{
//此处是当纵坐标的差值大于横坐标的差值,下边的解释重复上边,只是要输出的方向变了
System.out.println(Math.abs(yc));
if(xc>0){
if(yc>0){
for(int i=0;i<Math.abs(xc);i++)
System.out.println("LD");
int c=Math.abs(yc)-Math.abs(xc);
for(int i=0;i<c;i++)
System.out.println("D");
}
else{
for(int i=0;i<Math.abs(xc);i++)
System.out.println("LU");
int c=Math.abs(yc)-Math.abs(xc);
for(int i=0;i<c;i++)
System.out.println("U");
}
}
else{
if(yc>0){
for(int i=0;i<Math.abs(xc);i++)
System.out.println("RD");
int c=Math.abs(yc)-Math.abs(xc);
for(int i=0;i<c;i++)
System.out.println("D");
}
else{
for(int i=0;i<Math.abs(xc);i++)
System.out.println("RU");
int c=Math.abs(yc)-Math.abs(xc);
for(int i=0;i<c;i++)
System.out.println("U");
}
}
}
}
}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值