1. 程式人生 > >X星球居民小區的樓房全是一樣的...

X星球居民小區的樓房全是一樣的...

ron system for string input pan 排列 tin rgs

每周一題之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 december.year18;

import java.util.Scanner;

public class Solution4 {
    
    public static void main(String[] args) {
        Scanner input =new Scanner(System.in);
        int w=input.nextInt();
        int m=input.nextInt();
        
int n=input.nextInt(); int [][] maps=new int[10001][w]; for (int i = 0; i < w; i++) { maps[0][i]=i+1; } int maxn=Math.max(m, n); int len=maxn/w+1; System.out.println(len); int temp=0; for (int i = 0; i <len ; i++) {
if(i%2==0) { int bei=(i+2)*w; for (int j = 0; j <w ; j++) { maps[i+1][j]=bei-j; } temp=bei; }else { for (int j = 0; j <w ; j++) { maps[i+1][j]=temp+j+1; } } } int x1 = 0,y1 = 0,x2 = 0,y2 = 0; for (int i = 0; i < len; i++) { for (int j = 0; j < w; j++) { if(maps[i][j]==n) { x1=i;y1=j; }else if(maps[i][j]==m) { x2=i;y2=j; } } } System.out.println(Math.abs((x2-x1)+y2-y1)); } }

X星球居民小區的樓房全是一樣的...