11月18,时隔3个多月,又开始了acm

再次上手感觉有点吃力,本来之前那半个月就没学扎实,3个月没碰它,基本上也没怎么用C编过程,脑袋瞬间又迟钝了。

首先在字符输入上,C那奇葩的输入输出方式还是不习惯,想输入个string字符串,但不能用scanf,必须要用字符数组,骂人,还他妹的搞老半天。



那个破codeblocks也该卸了,妈的居然不认识math.h 头函数中的abs(int i)fabs(int i),气死了,用vc6.0 就行了,

做的是北大oj的1657  题,此题确实很简单的一道题,只是找出 王、后、车、象从出发点到终点的最短步数,根据各个特点,

注意 x==0&&y==0 输出0 0 0 0


我们假设起始位置与终止位置在水平方向上的距离是 x,它们在竖直方向上的距离是y。
根据王的行走规则,他可以横、直、斜走,每步限走一格,所以需要的步数是min(x,y)+abs(x-y)
– 即x,y 中较小的一个加上x 与y 之差的绝对值。根据后行走的规则,她可以横、直、斜
走,每步格数不受限制,所以需要的步数是1(x 等于y 或者 x 等于0 或者 y 等于0)或者
2(x 不等于y)。根据车行走的规则,它可以横、竖走,不能斜走,格数不限,需要步数为1
(x 或者y 等于0)或者2(x 和y 都不等于0)。根据象行走得规则,它可以斜走,格数不限。
棋盘上的格点可以分为两类,第一类是它的横坐标和纵坐标之差为奇数,第二类是横纵坐标
之差为偶数。对于只能斜走的象,它每走一步,因为横纵坐标增加或减小的绝对值相等,所
以横坐标和纵坐标之差的奇偶性无论如何行走都保持不变。因此,上述的第一类点和第二类
点不能互相到达。如果判断出起始点和终止点分别属于两类点,就可以得出它们之间需要无
数步的结论。如果它们属于同一类点,象从起始点走到终止点需要1(x 的绝对值等于y 的
绝对值)或者2(x 的绝对值不等于y 的绝对值)。



#include <stdio.h>
#include <string.h>
#include <math.h>
int min(int x,int y)
 {
	 if(x>y) return y;
	 else return x;
 }
int main ()
{
    int cl;
    scanf("%d",&cl);
    for(int i=1;i<=cl;i++)
    {
        char bg[3],ed[3];
        int x,y;
        scanf("%s%s",bg,ed);
        x=(int)bg[0]-(int)ed[0];
        y=(int)bg[1]-(int)ed[1];
        x=abs (x);
        y=abs (y);
		if(x==0&&y==0)printf("0 0 0 0\n");
		else
		{
          int w,h,j;
           w  =min(x,y)+abs (x-y);
           if(x==y||x==0||y==0) h=1;
           else h=2;
           if(x==0||y==0) j=1;
           else j=2;
		   printf("%d %d %d ",w,h,j);
           if(abs(x-y)%2!=0) printf("Inf\n");
		   else if(x==y)printf("1\n");
           else printf("2\n");
		}

    }
return 0;
}


我们假设起始位置与终止位置在水平方向上的距离是 x,它们在竖直方向上的距离是y。
根据王的行走规则,他可以横、直、斜走,每步限走一格,所以需要的步数是min(x,y)+abs(x-y)
– 即x,y 中较小的一个加上x 与y 之差的绝对值。根据后行走的规则,她可以横、直、斜
走,每步格数不受限制,所以需要的步数是1(x 等于y 或者 x 等于0 或者 y 等于0)或者
2(x 不等于y)。根据车行走的规则,它可以横、竖走,不能斜走,格数不限,需要步数为1
(x 或者y 等于0)或者2(x 和y 都不等于0)。根据象行走得规则,它可以斜走,格数不限。
棋盘上的格点可以分为两类,第一类是它的横坐标和纵坐标之差为奇数,第二类是横纵坐标
之差为偶数。对于只能斜走的象,它每走一步,因为横纵坐标增加或减小的绝对值相等,所
以横坐标和纵坐标之差的奇偶性无论如何行走都保持不变。因此,上述的第一类点和第二类
点不能互相到达。如果判断出起始点和终止点分别属于两类点,就可以得出它们之间需要无
数步的结论。如果它们属于同一类点,象从起始点走到终止点需要1(x 的绝对值等于y 的
绝对值)或者2(x 的绝对值不等于y 的绝对值)。
参考程序
1.题 听

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值