`
only_xxp
  • 浏览: 13495 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

pku1657

 
阅读更多

pku第1657题

http://poj.org/problem?id=1657

 

大致是把王、后、车、象从一个位置移动到另一个位置

 

 

下面是我的代码

/*
1	x和y分别为水平距离和垂直距离 注意王的分析, 王是走x和y中最大的
	同行为x==0  不需要再location1[0] == location2[0]    同列也一样
	同对角线为x==y

2	特别要注意x==y==0的特殊情况 即从点a1移动到a1, 如果不作特殊处理, 会输出0 1 1 1
*/

#include <iostream>
#include <cmath>
using namespace std;

int main(){
	int n;//输入n
	char location1[3], location2[3];
	scanf("%d", &n);
	for(int i=0; i<n; i++){//n次循环
			scanf("%s %s", location1, location2);//读入两个位置
			int x = abs(location1[0] - location2[0]);
			int y = abs(location1[1] - location2[1]);

			if(x == 0 && y == 0)
				printf("0 0 0 0\n");
			else{
				//处理王 同行, 同列, 其它
				if(x < y)
					printf("%d ", y);
				else 
					printf("%d ", x);
				//处理后 同行, 同列, 对角线为1  其它为2
				if(x == 0 || y == 0 || x == y)
					printf("%d ", 1);
				else
					printf("%d ", 2);
				//处理车 同行, 同列为1  其它为2
				if(x ==0 || y == 0)
					printf("%d ", 1);
				else
					printf("%d ", 2);
				//处理象, 对角线为1, 同色为2  其它为Inf
				if(x == y)
					printf("%d\n", 1);
				else if( (x + y) % 2 == 0)
					printf("%d\n", 2);
				else 
					printf("Inf\n");
			}
	}

	//printf("%d", 'a'-96);
	system("pause");
	return 0;
}

 

 

从这个题目之中, 我的收获是:

1. 要注意特殊情况, 如位置不变

2. 一些可简化的数学运算

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics