/* (程序头部注释开始)
* 程序的版权和版本声明部分
* Copyright (c) 2016, 广州科技贸易职业学院信息工程系学生
* All rights reserved.
* 文件名称: 蓝桥杯赛题
* 作 者: 彭俊豪
* 完成日期: 2016 年 04月 01日
* 版 本 号: 001
* 对任务及求解方法的描述部分
* 问题描述:
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 Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int w = sc.nextInt();
int m = sc.nextInt();
int n = sc.nextInt();
f(w, m, n);
}
public static void f(int w,int m,int n){
int sum1;
int sum2;
int sum3;
if (m<w) {
if(m<=w/2){
sum1 = m;
}else {
sum1 = w-m;
}
}else if(m%w==0) {
sum1 = 1;
}else {
if (m%w>=w/2) {
sum1 = w-m%w+1;
}else {
sum1 = (m-m/w*w);
}
}
if (n<w) {
if(n<=w/2){
sum2 = n;
}else {
sum2 = w-n;
}
}else if(n%w==0) {
sum2 = 1;
}else {
if (n%w>=w/2) {
sum2 = w-n%w+1;
}else {
sum2 = (n-n/w*w);
}
}
if (n/w==m/w) {
sum3 = 0;
}else {
sum3 = Math.abs(n-m)/w-1;
}
System.out.println(sum1+sum2+sum3);
}
}