《演算法競賽 入門經典》劉汝佳第四章

2021-10-08 12:09:43 字數 2917 閱讀 9447

象棋uva1589

題目:給定乙個棋局,黑方僅剩一將,紅方剩2~7個棋子,型別有g(帥)、h(馬)、

r(車)、c(炮),現輪黑方走,判斷黑方下完後是否為輸,輸則輸出yes,不輸則

輸出no。輸入第一行n,x,y,接下去行,每行型別(ch),座標(x,y),以0 0 0為輸

入終止。

sample:

輸入:

5 1 5

g 9 6

c 8 8

c 1 8

r 2 3

r 10 1

4 1 5

g 10 4

c 6 5

h 5 5

r 1 1

輸出

no

yes

程式通過了udebug上的全部樣例。

題目本身不難,只是繁雜,還有乙個小坑點,不輸包括了紅方殺不了黑將和黑將直接殺了紅帥兩種情況,所以程式要囊括2種,第一次寫的時候沒判斷贏的情況。在寫判斷贏的情況的時候,還傻乎乎的在想吃了對方的帥黑將還能不能活,哎!太蠢了。

思路:①先用mesh做好棋盤

②判斷黑將能不能贏

③判斷四個方位能不能走,能走判斷會不會被吃

小細節:注意改動棋盤,不然在判斷會不會被吃時會有出錯

#include

#include

#include

#include

//#include

using

namespace std;

int mesh[11]

[11];

struct chess

;struct chess chess[8]

;int n;

//傳入黑將可能的座標(4個)

bool

iskill

(int x,

int y)

;//馬8個方位的判斷

int step[4]

=;//蹩馬腳判斷

int j;

for(

int i=

0;i(j==chess[i]

.x)flag=0;

}break

;//車將在同一直線,中間無子則flag=0

case

'r':

if(chess[i]

.y==y)

if(j==x1)flag=0;

}if(chess[i]

.x==x&&flag)

if(j==y1)flag=0;

}break

;//馬可跳的方位如果存在黑將,則flag=0

case

'h':

for(j=

0;j<=

3;j++)}

}if(flag==0)

break;}

break

;case

'c':

int cnt=0;

if(chess[i]

.y==y)

if(cnt==

1)flag=0;

//中間僅有1個則不能}if

(chess[i]

.x==x&&flag)

if(cnt==

1)flag=0;

}break;}

if(flag==0)

break;}

return flag;

}int

main()

;int x,y, cnt=1;

//fstream fin;

// fin.open("ans.txt",ios::out);

while

(cin>>n>>x>>y && n&&x&&y)

bool flag=0;

//能直接將軍對方則flag=1,輸出no

if(chess[0]

.y==y)

if(j==chess[0]

.x)flag=1;

}//不能直接將軍,判斷黑將所有可走的位置

for(

int i=

0;i<=

3;i++)if

(flag)}if

(!flag)

}// fin.close();

return0;

}

正方形uva201

思路:暴力

#include

#include

using

namespace std;

int h[10]

[10],v[10]

[10];

int n,m;

intjudge

(int len)}if

(p)num++;}

}return num;

}int

main()

//計算

int ans[10]

,flag=

1,len;

memset

(ans,0,

sizeof

(ans));

for(len=

1;len<=n;len++

)//輸出

cout<<

"problem #"

<

"no completed squares can be found."

for(

int i=

1;i<=n;i++

) cout<"***********************************"

<}}

黑白棋uva220

劉汝佳《演算法競賽入門經典》索引筆記

2015年4月30日 acm學習技巧 14 浮點數陷阱 18 include 22 fopen input.txt r stdin 25 ifdef 26 lld 29 大陣列在main外面宣告 34 memset a,0,sizeof a 35 count 濫用 40 linux換行符問題 41 ...

《演算法競賽入門經典》第四章小結

題目 編寫乙個函式solve,給定浮點數a,b,c,d,e,f,求解方程組ax by c,dx ey f.任務1 使用assert巨集,讓解不唯一時異常退出。任務2 解不唯一時仍正常返回,但呼叫者有辦法知道解的數量 無解,唯一解,無窮多組解 思考 函式的引數都有哪些,各是什麼型別?任務1 inclu...

演算法競賽入門經典 第四章答案

4.4.1 小問題集錦 任務1 使用assert巨集,讓解不唯一時退出。include includevoid solve double a,double b,double c,double d,double e,double f,double x,double y int main 任務2 解不唯...