2212 - 将棋
时间限制 : 1 秒
内存限制 : 128 MB
世界上有4大棋类:中国象棋,国际象棋,围棋、日本将棋。
下面先介绍一下日本将棋的规则:
将棋的棋盘是一个由10条横线及10条竖线相交的方格阵,而棋子则置于方格之内,也就 是9列9行的棋盘。靠近自己的3列是本阵,远离自己而靠近对手的3列是敌阵。
将棋的棋子呈钟形,前端较尖。和中国象棋及国际象棋不同,将棋是以棋子前端的指的方向来区别所属。将棋共有八种棋子,分别为王将、飞车、角行、金将、银将、桂马、香车、步兵。每种棋子均有独特的简称及走法。
Miaowu最近在学日本将棋,他看到其中“银将”的走法是:可以向左前,前,右前,左后,右后,走一格。
这时候他在想,如果这时候在一个无穷大的棋盘内,告诉你银将的初始位置和终止位置,问最少要移动多少次才能将他初始位置移动到终止位置呢?
题目输入
第一行输入一个数T,表示测试数据个数,对于每组数据,输入四个数,x1,y1,x2,y2(-10^9<=x1,y1,x2,y2<=10^9)
题目输出
对于每组数据,输出一个数,表示最少的移动次数。
输入/输出样例
输入格式
2 1 0 1 9 0 0 -4 3
输出格式
9 5
C++解答
#include<stdio.h> int jdz(int x) { if(x>=0) return x; else return -x; } int main() { int x1,x2,y1,y2,T,x; scanf("%d",&T); while(T--) { int x=0,y=0,n=0; scanf("%d%d%d%d",&x1,&y1,&x2,&y2); x=x2-x1; y=y2-y1; if(y>0) { n=jdz(x); if(n==y) printf("%d\n",n); else if(n<y) printf("%d\n",y); else { if(n==1) printf("2\n"); else { if((n+y)%2==0) printf("%d\n",n); else printf("%d\n",n+1); } } } else if(y<0) { n=jdz(x); y=jdz(y); if(n==y) printf("%d\n",n); else if(n<y) { if((n+y)%2==0) printf("%d\n",y); else printf("%d\n",y+2); } else { if(n==1) printf("2\n"); else { if((n+y)%2==0) printf("%d\n",n); else printf("%d\n",n+1); } } } else { n=jdz(x); if(n%2==1) printf("%d\n",n+1); else printf("%d\n",n); } } return 0; }