X星球居民小区的楼房全是一样的,并且按矩阵样式排列。其楼房的编号为1,2,3...

简介: X星球居民小区的楼房全是一样的,并且按矩阵样式排列。其楼房的编号为1,2,3...

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

*/

方法一:(思维简单,但比较麻烦,执行速度慢)

package 蓝桥;
import java.util.Scanner;
public class lou {
  public static void main(String[] args) {
    Scanner scanner=new Scanner(System.in);
    int tamp=scanner.nextInt();
    int n,m,sum=0;
    n=scanner.nextInt();
    m=scanner.nextInt();
    int[][] a=new int[10000/tamp+10][tamp];
    int x=-1,y=0,o=1;
    for (int i = 1; i <= 10000; i++) {
      x+=o;
      //System.out.println(y+"   "+x);
      a[y][x]=i;
      if((x==0||x==tamp-1)&&i!=1)
      {
        o=-o;
        y++;
        i++;
        //System.out.println(y+"   "+x);
        a[y][x]=i;
      }
    }
    x=y=-99;
    int x2=-99,y2=-99;
    for (int i = 0; i < ((10000/tamp)+1); i++) {
      for (int j = 0; j <tamp ; j++) {
        if (a[i][j]==n) {
          x=i;
          y=j;
          break;
        }
      }
      if (x!=-99&&y!=-99) {
        break;
      }
    }
    for (int i = 0; i < ((10000/tamp)+1); i++) {
      for (int j = 0; j <tamp ; j++) {
        if (a[i][j]==m) {
          x2=i;
          y2=j;
          break;
        }
      }
      if (x2!=-99&&y2!=-99) {
        break;
      }
    }
    sum=Math.abs(x-x2)+Math.abs(y-y2);
    System.out.println(sum);
  }
}

方法二:(找规律,速度快)

package 蓝桥;
import java.util.Scanner;
public class lou {
  public static void main(String[] args) {
    Scanner scanner=new Scanner(System.in);
    int tamp=scanner.nextInt();
    int n,m,sum=0;
    n=scanner.nextInt();
    m=scanner.nextInt();
    sum+=Math.abs((n+tamp-1)/tamp-(m+tamp-1)/tamp);
    int x=(n%tamp);
    int y=(m%tamp);
    if (((n+tamp-1)/tamp)%2==0&&x!=0) {
      x=tamp-x+1;
    }
    else if (x==0) {
      x=1;
    }
    if (((m+tamp-1)/tamp)%2==0&&y!=0) {
      y=tamp-y+1;
    }
    else if (y==0) {
      y=1;
    }
    sum+=Math.abs(x-y);
    System.out.println(sum);
  }
}

           


相关文章
|
SQL 分布式计算 资源调度
在CDH7.1.1上为Ranger集成OpenLDAP认证
在CDH7.1.1上为Ranger集成OpenLDAP认证
426 0
|
SQL 存储 NoSQL
实时计算 Flink版产品使用合集之使用ParameterTool.fromArgs(args)解析参数为null,该怎么处理
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
316 2
|
存储 SQL 关系型数据库
openGauss6.0单点企业版部署_openEuler22.03_x86
openGauss6.0单点企业版部署_openEuler22.03_x86
|
运维 Ubuntu Linux
深入理解并实践Docker容器化技术
深入理解并实践Docker容器化技术
324 6
|
存储 数据库 数据安全/隐私保护
服务器数据备份是保障数据安全、防止数据丢失和灾难恢复的重要措施
服务器数据备份是保障数据安全、防止数据丢失和灾难恢复的重要措施
567 2
|
SQL 人工智能 SEO
|
机器学习/深度学习 传感器 语音技术
毕业设计|基于STM32单片机的语音识别控制智能停车场设计
毕业设计|基于STM32单片机的语音识别控制智能停车场设计
680 0
|
编译器 C++ 容器
STL常用之vector,list,stack,queue,deque总结与对比
STL常用之vector,list,stack,queue,deque总结与对比
|
Java Spring
spring的两种拦截器HandlerInterceptor和MethodInterceptor
spring的两种拦截器HandlerInterceptor和MethodInterceptor
|
XML Java 数据库
Android App开发实战之实现微信记账本(附源码 超详细必看)
Android App开发实战之实现微信记账本(附源码 超详细必看)
619 0