第八届java c组,2015年Java方向C组第八题
標題:移動距離
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
資源約定:
峰值內存消耗(含虛擬機) < 256M
CPU消耗 < 1000ms
請嚴格按要求輸出,不要畫蛇添足地打印類似:“請您輸入...” 的多余內容。
所有代碼放在同一個源文件中,調試通過后,拷貝提交該源碼。
注意:不要使用package語句。不要使用jdk1.7及以上版本的特性。
注意:主類的名字必須是:Main,否則按無效代碼處理。
解析:
根據題意,得出結論,最短距離=(兩個數行號之差絕對值)+(兩個數的列號之差絕對值)。
Scanner input = new Scanner(System.in);
int w = input.nextInt(); //矩陣一行的元素個數(寬度)
int m = input.nextInt(); //第一個數字
int n = input.nextInt(); //第二個數字
//根據題意,得出結論,最短距離=(兩個數行號之差絕對值)+(兩個數的列號之差絕對值)。
//此處行號從1開始
int mRow = m % w == 0 ? m / w : m / w+1; //第一個數的行號
int nRow = n % w == 0 ? n / w : n / w+1; //第二個數的行號
int mCol = 0; //第一個數字的列號,列號從0開始
if(mRow % 2 == 1) //奇數行(列號=m-當前行最小的數字)
mCol = m - (w*(mRow-1)+1);
else //偶數行(列號 = 當前行最大的數字-m)
mCol = w*mRow - m;
int nCol = 0; //第二個數字的列號,列號從0開始
if(nRow % 2 == 1) //奇數行(列號=m-當前行最小的數字)
nCol = n - (w*(nRow-1)+1);
else //偶數行(列號 = 當前行最大的數字-m)
nCol = w*nRow - n;
//由于我們要求的是行號之差和列號之差,所以行號和列號從0開始或從1開始并沒有影響
int r = Math.abs(mRow-nRow) + Math.abs(mCol - nCol);
System.out.println(r);
總結
以上是生活随笔為你收集整理的第八届java c组,2015年Java方向C组第八题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: php和派森,安装多版本Python,一
- 下一篇: java投票输出票数最高前三名,给你喜欢