本文主要是介绍蓝桥杯:每周一练之楼房最短距离问题,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
我的博客:https://blog.csdn.net/txb116424
学习资料和练习题目地址: http://dasai.lanqiao.cn/pages/dasai/news_detail_w.html?id=644
[问题描述]
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范围内
要求输出一个整数,表示m n 两楼间最短移动距离。
[样例输入]
6 8 2
[样例输出]
4
[样例输入]
4 7 20
[样例输出]
5
*/
import java.util.Scanner;public class MinDistance1 {public static void main(String[] args) {Scanner in = new Scanner(System.in);while (true) {int w = in.nextInt();int m = in.nextInt();int n = in.nextInt();get_coordinates(w, m, n);}}// 输出坐标差值(两楼距离)public static void get_coordinates(int w, int m, int n) {int x1 = hang(w, m);int x2 = hang(w, n);int y1 = lie(w, m);int y2 = lie(w, n);// Math.abs()返回一个数的绝对值System.out.println(Math.abs(x1 - x2) + Math.abs(y1 - y2));}// 获取横坐标public static int hang(int w, int a) {int x, y;x = (a - 1) / w + 1;return x;}// 获取纵坐标public static int lie(int w, int a) {int x, y;x = (a - 1) / w + 1;y = a % w;if (y == 0)y = w;if (x % 2 == 0) // 双数行是逆序y = w - y + 1;return y;}
}
这篇关于蓝桥杯:每周一练之楼房最短距离问题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!