蓝桥杯 15省赛 C8 移动距离(Math操作)

蓝桥杯 15省赛 C8 移动距离(Math操作)

移动距离
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

资源约定:
峰值内存消耗(含虚拟机) < 256M
CPU消耗 < 1000ms

===============

总结:
看了一下lang.Math,还有一些很不错的api的
Math.abs() 取绝对值
cos() & acos() 三角函数与反三角函数
min() & max()
pow()
toDegrees()

public class 细节_8 {
	
	static int wid;
	static int a ,b;
	static int path;

	public static void main(String[] args) {
		init();
		
		run();
		
		System.out.println(path);
	}

	private static void run() {
		
		int a_raw =0 ,a_col =0;
		a_raw =a/wid +1;
		if(a_raw %2 ==0) {
			a_col =a_raw *wid -a +1;
		}else {
			a_col =a -(a_raw -1)*wid;
		}
		
		int b_raw =0 ,b_col =0;
		b_raw =b/wid +1;
		if(b_raw %2 ==0) {
			b_col =b_raw *wid -b +1;
		}else {
			b_col =b -(b_raw -1)*wid;
		}
		
		int col =Math.abs(a_col -b_col);
		int raw =Math.abs(a_raw -b_raw);
		
		path =col +raw;
		
	}

	private static void init() {
		
		Scanner scan =new Scanner(System.in);
		
		String[] strs =scan.nextLine().split(" ");
		wid =Integer.parseInt(strs[0]);
		a =Integer.parseInt(strs[1]);
		b =Integer.parseInt(strs[2]);
		
		scan.close();
	}

}

猜你喜欢

转载自blog.csdn.net/weixin_43638238/article/details/107669179
今日推荐