X星球居民小区的楼房全是一样的,并且按矩阵样式排列。
其楼房的编号为 1,2,3…
当排满一行时,从下一行相邻的楼往反方向排号。
比如:当小区排号宽度为 6 时,开始情形如下:
1 2 3 4 5 6
12 11 10 9 8 7
13 14 15 …
我们的问题是:已知了两个楼号 m 和 n,需要求出它们之间的最短移动距离(不能斜线方向移动)。
输入格式
输入共一行,包含三个整数 w,m,n,w 为排号宽度,m,n 为待计算的楼号。
输出格式
输出一个整数,表示 m,n 两楼间最短移动距离。
数据范围
1≤w,m,n≤10000,
输入样例:
6 8 2
输出样例:
4
这道题是求曼哈顿距离:|x1-x2|+|y1-y2|
还运用了c++中二维数组下标从零开始
首先先画出正常的图
然后根据c++二维数组下标从零开始画出如下的图
我们可以发现规律:
行号h=m/w
列号l=n%w
之后由题意得排列的方式是蛇形 得出下图
这里的行号不变,只需判断列号即可
由图发现只有奇数行的列号发生改变
因此我们需要判断是否为奇数行
#include<bits/stdc++.h>
using namespace std;
int main()
{
int w, m, n;
cin >> w >> m >> n;
m --, n -- ;//二维数组从零开始
int x1, x2, y1, y2;
x1 = m / w;
x2 = n / w;
y1 = m % w;
y2 = n % w;
//判断是否为奇数行
if (x1 % 2 != 0) y1 = w - 1 - y1;
if (x2 % 2 != 0) y2 = w - 1 - y2;
cout << abs(x1 - x2) + abs(y1 - y2) << endl;//曼哈顿距离
return 0;
}
https://www.acwing.com/problem/content/1221/
各位小伙伴们快来试试吧!!!
上篇文章给大家介绍了 Java正则表达式匹配,替换,查找,切割的方法 ,接下来,...
工具:Eclipse,Oracle,smartupload.jar;语言:jsp,Java;数据存储:Oracle。...
复制代码 代码如下: % URL="http://news.163.com/special/00011K6L/rss_newstop....
正则忽略大小写 – RegexOptions.IgnoreCase 例如: 复制代码 代码如下: Str = R...
DELETEFROMTablesWHEREIDNOTIN(SELECTMin(ID)FROMTablesGROUPBYName) Min的话保...
4月11日20:30~22:00通过腾讯会议进行了第二次在线学习讨论我把学习笔记整理一下...
项目中用到的一些特殊字符和图标 html代码 XML/HTML Code 复制内容到剪贴板 div ...
错误描述: 在开发.net项目中,通过microsoft.ACE.oledb读取excel文件信息时,报...
本文实例讲述了Laravel框架源码解析之反射的使用。分享给大家供大家参考,具体如...
Elasticsearch 是通过 Lucene 的倒排索引技术实现比关系型数据库更快的过滤。特...