蓝桥杯-移动距离

移动距离

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

再例如:
用户输入:
4 7 20
则,程序应该输出:
5

资源约定:
峰值内存消耗 < 256M
CPU消耗 < 1000ms

请严格按要求输出,不要画蛇添足地打印类似:“请您输入...” 的多余内容。

所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。

注意: main函数需要返回0
注意: 只使用ANSI C/ANSI C++ 标准,不要调用依赖于编译环境或操作系统的特殊函数。
注意: 所有依赖的函数必须明确地在源文件中 #include <xxx>, 不能通过工程设置而省略常用头文件。

提交时,注意选择所期望的编译器类型。

#include <iostream>
#include <cmath>
using namespace std;
int main()
{
int w,m,n;
cin>>w>>m>>n;//w为排号宽度,m,n为待计算的楼号

m--;
n--;

int m1=m/w, m2=m%w;
if(m1&1)
{
m2=w-1-m2;
}

int n1=n/w, n2=n%w;
if(n1&1)
{
n2=w-1-n2;
}

cout<<abs(m1-n1)+abs(m2-n2)<<endl;
return 0;
}
/*
m1&1和n1&1是判断奇数偶数的,

最后输出abs(m1-n1)这个没问题吧?就是两个楼差的行数,比如7和20,
这部分就是3
abs(m2-n2)的部分就是判断两楼在同一行时需要走的路。
如果m1或者n1是奇数,w-1-m1表示楼离最左边的距离。
也就是最后求两个楼离最左边距离的差的绝对值

最初的时候m--和n--,表示把整个矩阵改变为从0开始。

比如4 7 20

矩阵:
0 1 2 3
7 6 5 4
8 9 10 11
15 14 13 12
16 17 18 19
20
这样就是求6和19的距离了

其实如果不做m--和n--改变下算法也是可以的*/

#include <iostream>
#include <cmath>
using namespace std;
int main()
{
int w,m,n;
cin>>w>>m>>n;//w为排号宽度,m,n为待计算的楼号

m--;//最初的时候m--和n--,表示把整个矩阵改变为从0开始。
n--;//最初的时候m--和n--,表示把整个矩阵改变为从0开始。

int m1=m/w, m2=m%w;
if(m1&1)//如果m1或者n1是奇数,w-1-m2表示楼离最左边的距离
{
m2=w-1-m2;
}

int n1=n/w, n2=n%w;
if(n1&1)//如果m1或者n1是奇数,w-1-m1表示楼离最左边的距离,
//最后求两个楼离最左边距离的差的绝对值
{
n2=w-1-n2;
}

cout<<abs(m1-n1)+abs(m2-n2)<<endl;
//abs(m1-n1) 两个楼差的行数
// abs(m2-n2)判断两楼在同一行时需要走的路
return 0;
}

时间: 2024-08-14 15:57:07

蓝桥杯-移动距离的相关文章

2015 蓝桥杯:8.移动距离

*/--> pre.src {background-color: Black; color: White;} pre.src {background-color: Black; color: White;} pre.src {background-color: Black; color: White;} pre.src {background-color: Black; color: White;} pre.src {background-color: Black; color: White;}

2015年蓝桥杯省赛B组C/C++(试题+答案)

首先说,这次我是第二次参加蓝桥杯(大学里最后一次),可这次去连个三等都没拿到,有些心灰意冷,比上一次还差, 当时看到成绩出来的时候有些失落,但是跌倒了,再站起来继续跑就可以了.可能是状态不好吧,纯属自我安慰. 接下来我把今年的题目又重新做了一遍,写下了这篇博客,如果也有需要探讨答案的,希望可以有帮助. 第一题: 第1题:统计不含4的数字 题目大意 统计10000至99999中,不包含4的数值个数. 解题分析: 第一种解法: 数学方法,这种是在网上看到的一种解法: 最高位除了0.4不能使用,其余8

第六届蓝桥杯2015-省赛-C语言大学B组 个人题解

题目连接:http://course.baidu.com/view/2d86a6c1960590c69fc37622.html 1,奖券数目52488 #include <iostream> using namespace std; bool isOK(int a) { while(a) { if(a%10==4) return false; a /= 10; } return true; } int main() { int ans = 0; for(int i=10000; i<=9

蓝桥杯——真题训练之蚂蚁感冒

标题:蚂蚁感冒 长100厘米的细长直杆子上有n只蚂蚁.它们的头有的朝左,有的朝右. 每只蚂蚁都只能沿着杆子向前爬,速度是1厘米/秒. 当两只蚂蚁碰面时,它们会同时掉头往相反的方向爬行. 这些蚂蚁中,有1只蚂蚁感冒了.并且在和其它蚂蚁碰面时,会把感冒传染给碰到的蚂蚁. 请你计算,当所有蚂蚁都爬离杆子时,有多少只蚂蚁患上了感冒. [数据格式] 第一行输入一个整数n (1 < n < 50), 表示蚂蚁的总数. 接着的一行是n个用空格分开的整数 Xi (-100 < Xi < 100),

【蓝桥杯】PrimeDistance

如果p1和p2(p1< p2)均为素数,且任意整数p(p1< p< p2)都不是素数,则说素数p1与p2是相邻的,并定义它们之间的距离为d= p2 - p1.给定正整数L和U,求出区间[L, U]中距离最小的两个相邻素数C1与C2和距离最大的两个相邻素数D1与D2. 例如,L=2,U=17时,C1=2,C2=3,D1=7,D2=11. import java.util.ArrayList; import java.util.Scanner; public class PrimeDista

第六届蓝桥杯本科B组C++省赛题解

比赛结束已经一星期了,成绩也出来了,江苏非211组的省前十,但是深感自己还是有太多的不足.绝对不能以自己还只是大一为借口,acm这条路还长的很. 目测得了95分(满分150),第一题错了,代码填空第一题错了,倒数第二题扣了一点分,最后一道大题全错. 之所以会这么晚来发这道题解,是因为深感自己不足,倒数第二题之所以没有做出来,是因为自己居然不会用[矩阵快速幂].因此,现学现用以自省. 关于题目:所有填空题都可以纯暴力,只要会回溯剪枝法对于蓝桥杯已经足够了.大题目难度一年比一年高 第一题 结果填空

第四届蓝桥杯 c/c++真题

第四届蓝桥杯 c/c++真题 <1>高斯日记 问题 大数学家高斯有个好习惯:无论如何都要记日记. 他的日记有个与众不同的地方,他从不注明年月日,而是用一个整数代替,比如:4210 后来人们知道,那个整数就是日期,它表示那一天是高斯出生后的第几天.这或许也是个好习惯,它时时刻刻提醒着主人:日子又过去一天,还有多少时光可以用于浪费呢? 高斯出生于:1777年4月30日. 在高斯发现的一个重要定理的日记上标注着:5343,因此可算出那天是:1791年12月15日. 高斯获得博士学位的那天日记上标着:

第五蓝桥杯 蚂蚁冷

蚂蚁感冒 时间限制:1000 ms  |  内存限制:65535 KB 难度:2 描写叙述 长100厘米的细长直杆子上有n仅仅蚂蚁. 它们的头有的朝左,有的朝右. 每仅仅蚂蚁都仅仅能沿着杆子向前爬,速度是1厘米/秒. 当两仅仅蚂蚁碰面时.它们会同一时候掉头往相反的方向爬行. 这些蚂蚁中.有1仅仅蚂蚁感冒了.而且在和其他蚂蚁碰面时,会把感冒传染给碰到的蚂蚁. 请你计算,当全部蚂蚁都爬离杆子时,有多少仅仅蚂蚁患上了感冒. 输入 第一行输入一个整数n (1 < n < 50), 表示蚂蚁的总数. 接

《DNA比对》蓝桥杯复赛试题

题目描述 脱氧核糖核酸即常说的DNA,是一类带有遗传信息的生物大分子.它由4种主要的脱氧核苷酸(dAMP.dGMP.dCMT和dTMP)通过磷酸二酯键连接而成.这4种核苷酸可以分别记为:A.G.C.T. DNA携带的遗传信息可以用形如:AGGTCGACTCCA.... 的串来表示.DNA在转录复制的过程中可能会发生随机的偏差,这才最终造就了生物的多样性. 为了简化问题,我们假设,DNA在复制的时候可能出现的偏差是(理论上,对每个碱基被复制时,都可能出现偏差): 1. 漏掉某个脱氧核苷酸.例如把