a亚洲精品_精品国产91乱码一区二区三区_亚洲精品在线免费观看视频_欧美日韩亚洲国产综合_久久久久久久久久久成人_在线区

首頁 > 學院 > 開發設計 > 正文

ACM簡單計算題-棋盤上的距離

2019-11-14 10:26:26
字體:
來源:轉載
供稿:網友

問題描述

國際象棋的棋盤是黑白相間的 8 * 8 的方格,棋子放在格子中間。如下圖所示:

王、后、車、象的走子規則如下:

王:橫、直、斜都可以走,但每步限走一格。 后:橫、直、斜都可以走,每步格數不受限制。 車:橫、豎均可以走,不能斜走,格數不限。 象:只能斜走,格數不限。

寫一個程序,給定起始位置和目標位置,計算王、后、車、象從起始位置走到目標位置所需的最少步數。

輸入數據

        第一行是測試數據的組數 t( 0 <= t <= 20)。以下每行是一組測試數據,每組包括棋盤上的兩個位置,第一個是起始位置,第二個是目標位置。位置用"字母-數字"的形式表示,字母從"a"到"h",數字從"1"到"8"。

輸出要求

      對輸入的每組測試數據,輸出王、后、車、象所需的最少步數。如果無法到達,就輸出"Inf".

輸入樣例

2a1 c3f5 f8

輸出樣例

2 1 2 13 1 1 Inf

解題思路

        這個問題是給定一個棋盤上的起始位置和終止位置,分別判斷王、后、車、象從起始位置到達終止位置需要的步數。首先,王、后、車、象彼此獨立,分別考慮就可以了。所以這個題目重點要分析王、后、車、象的行走規則特點,從而推出它們從起點到終點的步數。我們假設起始位置與終止位置在水平方向上的距離是 x,它們在豎直方向上的距離是 y。       根據王的行走規則,他可以橫、直、斜走, 每步限走一格,所以需要的步數是 min(x,y)+abs(x-y)– 即 x, y 中較小的一個加上 x 與 y 之差的絕對值。       根據后行走的規則,她可以橫、直、斜走,每步格數不受限制,所以需要的步數是 1( x 等于 y 或者 x 等于 0 或者 y 等于 0)或者2(x 不等于 y)。       根據車行走的規則,它可以橫、豎走,不能斜走,格數不限,需要步數為 1( x 或者 y 等于 0)或者 2(x 和 y 都不等于 0)。       根據象行走得規則,它可以斜走,格數不限。棋盤上的格點可以分為兩類,第一類是它的橫坐標和縱坐標之差為奇數,第二類是橫縱坐標之差為偶數。對于只能斜走的象,它每走一步,因為橫縱坐標增加或減小的絕對值相等,所以橫坐標和縱坐標之差的奇偶性無論如何行走都保持不變。因此,上述的第一類點和第二類點不能互相到達。如果判斷出起始點和終止點分別屬于兩類點,就可以得出它們之間需要無數步的結論。如果它們屬于同一類點,象從起始點走到終止點需要 1( x 的絕對值等于 y 的絕對值)或者 2( x 的絕對值不等于 y 的絕對值)。

參考程序

#include <iostream>#include <cmath>using namespace std;int main(){	int nCases,i;	cin >> nCases;	for(i=0;i<nCases;i++){		char begin[5],end[5];		cin>>begin>>end;		int x,y;		//用 x 和 y 分別存儲起止位置之間 x 方向和 y 方向上的距離。		x = abs(begin[0]-end[0]);		y = abs(begin[1]-end[1]);		if(!x&&!y){			//起止位置相同,所有棋子都走 0 步。			cout<<"0 0 0 0"<<endl;		}else{			// 王的步數			if(x<y){				cout<<y;			}else{				cout<<x;			}			// 后的步數			if(x==y || !x || !y){				cout<<" 1";			}else{				cout<<" 2";			}			// 車的步數			if(!x || !y){				cout<<" 1";			}else{				cout<<" 2";			}			// 象的步數			if(abs(x-y)%2 != 0){				cout<<" Inf"<<endl;			}else if(x == y){				cout<<" 1"<<endl;			}else{				cout<<" 2"<<endl;			}		}	} 	return 0;}


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 男人都懂的www网站免费观看 | 中文字幕一区二区三区四区 | 麻豆国产一区二区三区四区 | 蜜桃av人人夜夜澡人人爽 | 久久久久国产精品一区二区三区 | 亚洲生活片 | av毛片在线免费看 | 久久久久久免费毛片精品 | av中文字幕在线观看 | 五月激情综合 | 久久久www成人免费精品 | 久久青草视频 | 在线成人av | 欧美性猛交一区二区三区精品 | 人人干人人干 | 国产成人精品免高潮在线观看 | 国产精品二区三区 | 在线观看不卡一区 | 成人久久18免费观看 | 亚洲女人天堂av | 性生生活大片免费看视频 | 中文字幕一区二区三区精彩视频 | 福利视频网址导航 | 高清国产一区二区三区四区五区 | 国产成人午夜视频 | 国产1页| 国产精品一区二区三 | 91在线观看视频 | 国产精品视频一区在线观看 | www.99日本精品片com | 一级一级黄色片 | 青青草在线视频免费观看 | 99精品视频一区二区三区 | 又黄又爽的网站 | 欧美日韩精品一区二区三区四区 | 在线观看亚洲精品视频 | 成人一区久久 | 天天艹天天干天天 | 久久久精品国产 | 国产精久久久久久久妇剪断 | 久草视频在线资源 |