链接:
https://vj.e949.cn/889526602f1f7ab5e44d789392754748?v=1539700752
题意:
给出S*S的棋盘,K,N,B,R分别表示要在棋盘上放国际象棋中的King,Knight,Bishop,Rook ,需要在棋盘上摆满同种象棋,问想使其中任意一个棋子的可达位置对应的棋子样式都不一样(但都是一类棋),最少需要多少种样式不同的棋子。
关于国际象棋的走法
思路:
对于King,虽然King可以走四周,但对于S大于等于2的棋盘,四个King就足够了。
对于Rook,直走的话,需要的就是边长大小即S个不同Rook。
对于Knight,类似中国国象棋的马,但是没有蹩马腿一说,这个,只需用两个马相间排列即可。
对于Bishop,斜走,需要的就是对角线长度,也是S。
#include <bits/stdc++.h>
using namespace std;
int main()
{
int s;
char c;
while(cin>>s>>c)
{
if(c == 'B' || c == 'R')
cout<<s<<endl;
else if(c == 'K')
{
if(s == 1)
cout<<1<<endl;
else
cout<<4<<endl;
}
else if(c == 'N')
{
if(s <= 2)
cout<<1<<endl;
else
cout<<2<<endl;
}
}
return 0;
}