蓝桥杯- 移动距离-java

时间:2022-06-20 03:15:13

/* (程序头部注释开始)

* 程序的版权和版本声明部分

* 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);

  }

}