題意:列印棋盤上棋子的位置。
解法:
研究一下輸出:
white: ke1,qd1,ra1,rh1,bc1,bf1,nb1,a2,c2,d2,f2,g2,h2,a3,e4
black: ke8,qd8,ra8,rh8,bc8,ng8,nc6,a7,b7,c7,d7,e7,f7,h7,h6
總共有k,q,r,b,n,p六種棋子。其中除了p以外所有的棋子在輸出位置的同時也要輸出棋子的型別。例如:ke1 , 指的是位於第一行(注意這裡的行數,規定最下面那一行開始,也就是和我們常規陣列的標號相反),第e列(列數從小到大a-h和1-8是一樣的)的k棋。
這題有幾個地方需要注意:
1,棋盤中大寫字母表示的是白方棋子,小寫是黑方。
2,注意棋盤的行數是從最下面開始計數的。和陣列的下標相反。也就是說陣列行數為8的棋盤行 數為1(陣列從1開始)。
3,最容易忽略也最重要的是:白旗和黑棋在輸出的時候其實排序規則是不一樣的(但是棋子的型別都要按照kqrbnp順序)。
主要是行列的優先問題:
白棋先按行數(棋盤的行編號)公升序排,然後按照列公升序排。解決辦法:按行公升序掃瞄輸出。
黑棋先按行數(棋盤的編號)降序排,然後按照列公升序排。解決辦法:按行降序掃瞄輸出。
輸出的時候主要是要注意一下迴圈掃瞄的順序就行了。
//poj 2996
#include
#include
#include
char mp[40][40];
int main()}}
//qfor(int i = 15; i >= 1; i -= 2)}}
//rfor(int i = 15; i >= 1; i -= 2)}}
//bfor(int i = 15; i >= 1; i -= 2)}}
//nfor(int i = 15; i >= 1; i -= 2)}}
//pfor(int i = 15; i >= 1; i-= 2)}}
printf("\n");
printf("black: ");
//kfor(int i = 1; i <= 15; i += 2)}}
//qfor(int i = 1; i <= 15; i += 2)}}
//rfor(int i = 1; i <= 15; i += 2)}}
//bfor(int i = 1; i <= 15; i += 2)}}
//nfor(int i = 1; i <= 15; i += 2)}}
//pfor(int i = 1; i <= 15; i += 2)}}
printf("\n");
return
0;}
poj 2420 poj1379 模擬退火
具體模擬退火的原理可參考 模擬退火可用於一些 精度 要求不是很高的題目。比如取答案的0.1,或者沒有小數點 poj2420 題意 給定n個點,找到乙個點,使得n個點到這個點的距離和最小 模擬退火法 模擬退火的過程 1 確定生成點的範圍,初設為矩形,在這個範圍內生成num個點 num自定 2 確定最高...
Poj1379 poj 2539(模擬退火
題目 在矩形中有若干個點,求乙個點使得所有點到該點的最小距離最大。思路 這個是2008年顧研 上的例題,可以比較簡單地用模擬退火演算法求解。所謂模擬退火就是先隨機出若干個點,然後以某一特定步長嘗試周圍的解,而後逐漸縮小步長,知道步長小於特定值,跳出。這個演算法雖然簡單易行,但是其正確性並不是非常有保...
poj1379 模擬退火
poj 1379 題意 給定n個點,你需要在給定矩形範圍內找到乙個點,使得它到這n個點的距離的最小值最大。一開始是用的顧研的方法,但總是ac不了,聽盾哥說他那個有問題。正確的演算法流程應該是 初始化 初始溫度de 充分大 初始p個並行解狀態s 演算法迭代的起點 失敗次數上限l,接受引數x,衰變係數k...