题解 CF519A 【A and B and Chess】

此题就是一个模拟题,但是如果一个个判断会很烦,而且代码量会很多,这里我就提出一种更好的方法:

事先开一个数值数组,对特殊的字符位置赋值

然后直接累加就好了。

代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include<bits/stdc++.h>
using namespace std;
int ans,s[200];//数值数组
//ans累加白方比黑方多的分数
char a;
int main(){
s['Q']=9,s['q']=-9;
//这里以白方为基准,其实用黑方也是一样的效果
//既然对白方是9分,那么如果黑方再来一个就得是-9分(抵消)
//以下同理
s['R']=5,s['r']=-5;
s['B']=s['N']=3,s['b']=s['n']=-3;
s['P']=1,s['p']=-1;
for (int i=0;i<8;i++)
for (int j=0;j<8;j++){
cin>>a;
ans+=s[a];
}
if (ans<0)printf ("Black");//白方比黑方多负分,当然黑方输出
else if (ans)printf ("White");//同理
else printf ("Draw");
}