X星球居民小區的樓房全是一樣的...
阿新 • • 發佈:2018-12-17
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星球居民小區的樓房全是一樣的...