P1747 好奇怪的游戏
题目背景
《爱与愁的故事第三弹·shopping》娱乐章。
调调口味来道水题。
题目描述
爱与愁大神坐在公交车上无聊,于是玩起了手机。一款奇怪的游戏进入了爱与愁大神的眼帘:***(游戏名被打上了马赛克)。这个游戏类似象棋,但是只有黑白马各一匹,在点 x 1 , y 1 x_1,y_1 x1,y1 和 x 2 , y 2 x_2,y_2 x2,y2 上。它们得从点 x 1 , y 1 x_1,y_1 x1,y1 和 x 2 , y 2 x_2,y_2 x2,y2 走到 ( 1 , 1 ) (1,1) (1,1)。这个游戏与普通象棋不同的地方是:马可以走“日”,也可以像象走“田”。现在爱与愁大神想知道两匹马到 ( 1 , 1 ) (1,1) (1,1) 的最少步数,你能帮他解决这个问题么?
注意不能走到 x x x 或 y y y 坐标 ≤ 0 \le 0 ≤0 的位置。
输入格式
第一行两个整数 x 1 , y 1 x_1,y_1 x1,y1。
第二行两个整数 x 2 , y 2 x_2,y_2 x2,y2。
输出格式
第一行一个整数,表示黑马到 ( 1 , 1 ) (1,1) (1,1) 的步数。
第二行一个整数,表示白马到 ( 1 , 1 ) (1,1) (1,1) 的步数。
输入输出样例 #1
输入 #1
12 16
18 10
输出 #1
8
9
说明/提示
数据范围及约定
对于 100 % 100\% 100% 数据, 1 ≤ x 1 , y 1 , x 2 , y 2 ≤ 20 1\le x_1,y_1,x_2,y_2 \le 20 1≤x1,y1,x2,y2≤20。
C++实现
#include <cstdio>
int i,j,k,m,n,l,o,p,x,y;
int sum(int x,int y)
{
int t,i,j,s1,s2,s3,s4;
if(x<y)//有可能x<y,所以交换一下以便求差
{
t=x;
x=y;
y=t;
}
if(x==2&&y==1) return 2;
else if(x==2&&y==2) return 3;
s1=x-y;//求差
s2=s1%4;//余数
s3=s1/4;//商
s4=s3+s2+(x+y-s2*3)/4;
return s4;
}
int main()
{
int a,b,c,d;
scanf("%d%d",&a,&b);
printf("%d\n",sum(a,b));
scanf("%d%d",&c,&d);
printf("%d",sum(c,d));
}
后续
接下来我会不断用C++来实现信奥比赛中的算法题、GESP考级编程题实现、白名单赛事考题实现,记录日常的编程生活、比赛心得,感兴趣的请关注,我后续将继续分享相关内容