[藍橋杯][2015年第六屆真題] 移動距離

小王子y發表於2020-12-18

題目描述
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

分析:這一題就是求兩個樓的行號列號差的絕對值之和
#include<bits/stdc++.h>
using namespace std; 
int main(){
	int w,m,n,t,l1,l2,r1,r2;
	cin>>w>>m>>n;
	l1=(m-1)/w+1; //第一個樓的行號 
	//第一個樓的列號 ,分奇數偶數 
	t=l1*w-m; //與這一行的最大值差值 
	if(l1%2==0) {
	 r1=t+1;	
	}  
	else{
	 r1=w-t; 	
	}  
	l2=(n-1)/w+1; 
	t=l2*w-n; 
	if(l2%2==0) {
	 r2=t+1;	
	}  
	else{
	 r2=w-t; 	
	}  
	printf("%d\n",abs(l1-l2)+abs(r1-r2));
	return 0;       
}

相關文章