继续挂python2.7 ,做模版存着,我其实也不太会……
# Class for Point
class Point:
def __init__(self , x , y):
self.x = x
self.y = y
# input start and end Point
str = raw_input()
start = Point(8-int(str[1]) , ord(str[0])-97)
str = raw_input()
end = Point(8-int(str[1]) , ord(str[0])-97)
# solve this problem
dir = [[-1,0],[-1,1],[0,1],[1,1],[1,0],[1,-1],[0,-1],[-1,-1]]
move = ["U","RU","R","RD","D","LD","L","LU"]
ans = max(abs(start.x-end.x) , abs(start.y-end.y))
# output
print ans
m = ans
x = start.x
y = start.y
# print "%d %d" % (start.x , start.y)
# print "%d %d" % (end.x , end.y)
while m > 0:
for i in range(8):
tmpx = x+dir[i][0]
tmpy = y+dir[i][1]
if (tmpx >= 0 and tmpx < 8 and tmpy >= 0 and tmpy < 8):
dis = max(abs(tmpx-end.x) , abs(tmpy-end.y))
if dis < m:
print move[i]
x = tmpx
y = tmpy
break
m -= 1
然后是C++正餐:
坑在了没有取绝对值abs,导致0比负数大从而无法正确判定步数。
第一次尝试make_pair/pair,感觉良好。
还是感觉—— (XXX)?XX:XX 这个式子太喜欢了!!!
#include <cstdio>
#include <iostream>
#include <algorithm>
#include <utility>
#define max(a,b) a>b?a:b
#define min(a,b) a<b?a:b
using namespace std;
typedef pair<char,int> pl;
int main()
{
pl src,dsn;
cin>>src.first>>src.second;
cin>>dsn.first>>dsn.second;
//cout<<(src.first-dsn.first)<<" And "<<(src.second-dsn.second)<<endl;
/*
char src_first, dsn_first;
int src_second, dsn_second;
cin>>src_first>>src_second;
cin>>dsn_first>>dsn_second;
*/
int rx= src.first-dsn.first;
int dy= src.second-dsn.second;
int maxv= rx>dy?rx:dy;
int minv= rx<dy?rx:dy;
if(src.first==dsn.first && dsn.first==dsn.second){
cout<<"0";
return 0;
}
int mxv=max(abs(maxv),abs(minv));//之前一直是mxv=maxv,坑惨了
cout<<mxv;
char x,y;
for(int i=0;i<mxv;i++)
{
if(rx!=0||dy!=0)cout<<endl;
if(rx!=0){
cout<<((rx>0)?"L":"R");
(rx>0)?rx--:rx++;
}
if(dy!=0)
{
cout<<((dy>0)?"D":"U");
(dy>0)?dy--:dy++;
}
}
//cin>>maxv;
return 0;
}