[蓝桥杯2015初赛]移动距离

题目描述

X星球居民小区的楼房全是一样的,并且按矩阵样式排列。
其楼房的编号为1,2,3... 当排满一行时,从下一行相邻的楼往反方向排号。
比如:当小区排号宽度为6时,开始情形如下:

1 2 3 4 5 6
12 11 10 9 8 7
13 14 15 .....

我们的问题是:已知了两个楼号m和n,需要求出它们之间的最短移动距离
(不能斜线方向移动)

输入

输入存在多组测试数据
输入为3个整数w m n,空格分开,都在1到10000范围内
w为排号宽度,m,n为待计算的楼号。

输出

要求输出一个整数,表示m n 两楼间最短移动距离。

样例输入

6 8 2
4 7 20

样例输出

4
5

我就搞不懂了,这道题我能错那么多次!

#include <iostream>
#include <cmath>
using namespace std;
 
void func(int w, int n, int &x, int &y)
{
    x = (n - 1)/w;//第几行
    y = (n - 1)%w;//第几列
 
    if (x%2 != 0)//判断奇偶列
    {
        y = w - 1 - y;//奇数行反序排列
    }
}
 
int main()
{
    int w,m,n,x1,y1,x2,y2;
    while(cin >> w >> m >> n){
        func(w, m, x1, y1);//第一个点的坐标
        func(w, n, x2, y2);//第二个点的坐标
        cout << abs(x1 - x2) + abs(y1 - y2) << endl;
 
    }
return 0;
 
}
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容