移动棋子(chess)

题目描述

一维的棋盘上有无限多个格子,每个格子都有一个编号,最中间的格子编号为 00 ,00 号格子向右依次编号为 11,22,33,… ,向左依次编号为 −1−1, −2−2, −3−3,… 。
小明的目标是要将一枚棋子从 𝑥x 号格子移动到 𝑦y 号格子。
每一次操作有两种选择:
操作 11 :向右移动 11 个格子。
操作 22 :从当前棋子所在的 𝑎a 号格子,直接跳到 −𝑎−a 号格子(如:可以从 66 直接跳到 −6−6 ,也可以从 −6−6 直接跳到 66 )。
可以证明,无论整数 𝑥x 和 𝑦y 的值是多少,目标总是可以实现的。
请你设计程序,帮小明计算把棋子从 𝑥x 号格子移动到 𝑦y 号格子需要的最少操作次数。

输入格式(输入文件为 chess.in)

一行,两个整数 𝑥x 和 𝑦y , 表示要将棋子从 𝑥x 号格子移动到 𝑦y 号格子。

输出格式(输出文件为 chess.out)

一个整数,表示小明把棋子从 𝑥x 号格子移动到 𝑦y 号格子需要的最少操作次数。

输入样例 #1

 10 20

输出样例 #1

 10

样例一说明

说明:需要进行1010次操作11。

输入样例 #2

 10 -10

输出样例 #2

 1

样例二说明

需要进行1次操作2

输入样例 #3

 -10 -20

输出样例 #3

 12

样例三说明

说明:先进行 11 次操作 22 ,然后进行 1010 次操作 11 ,最后进行 11 次操作 22 。

数据范围

对于 30% 的数据:|x|≤100,|y|≤100 ;
对于 100% 的数据:𝑥,𝑦x,y都为整数;|x| ≤ 10^9,|y|≤10^9;𝑥,𝑦x,y不相等。
有 40% 的数据,|x|>|y|。
有 40% 的数据,|x|<|y|。
有 20% 的数据,|x|=|y|。

AC代码
#include<bits/stdc++.h>
using namespace std;
int main(){
	long long ans,x,y;
	cin>>x>>y;
	long long len=abs(abs(x)-abs(y));
	if(x*y>0){
		if(x>y){
			ans=len+2;
		}else{
			ans=len;
		}
	}else if(x*y<0){
		ans=len+1;
	}else{
		if(x<y){
			ans=len;
		}else{
			ans=len+1;
		}
	}
	cout<<ans<<"\n";
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值