【蓝桥杯】试题 历届真题 移动距离【第六届】【省赛】【A组】

文章描述了一种计算两座楼房之间距离的规律,根据楼房的坐标x和宽度w,通过行和列的计算来确定。行的计算是(x-1)/w,列的计算需要考虑方向(正向或反向)。提供的C++代码实现了这个算法,用于计算两楼房的绝对距离。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

找规律题。

题目描述不能斜着走,也就是说最终的距离是两个楼房的行差的绝对值加上列差的绝对值

如何求楼房的行列?设楼房x,宽度w

行好求:(x-1) /w即可。为什么要减一呢,因为楼房从1开始,假设宽度为4,第一行就是1,2,3,4。如果直接除w的话,求出的就是0,0,0,1可以看到同一行不同,所以必须要减一。

列:列因为有两种情况,正着来和反着来。只需要加一个行%2==0的判断即可。如果行%2==0就是正着来,列就是(x-1)%w【记下标从0开始】,如果行%2==1就反着来,列就是w-1-(x-1)%w【宽度减去从正着看的列数】。

#include<iostream>
#include<vector>
#include<algorithm>
#include<map>
#include<math.h>
#include<set>
#include<string>
using namespace std;

int getIndex(int x, int w)
{
	int level = (x-1) / w;
	if (level % 2 == 0)
	{
		return (x-1) % w;//正着来
	}
	else
	{
		return w-1-(x-1)%w;//反着来
	}
}
int main()
{
	int w, m, n;
	cin >> w >> m >> n;
	cout << abs(getIndex(m, w) - getIndex(n, w)) + abs((m-1) / w - (n-1) / w);

	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值