三连得分 给定⼀个10×10的棋盘,上⾯有两个玩家玩棋盘游戏的局⾯。其中玩家A的棋⼦⽤O表⽰,玩家B的棋 ⼦⽤X表⽰。请计算这个局⾯下两个玩家的得分。 得分计算规则如下:
按需求定制设计可以根据自己的需求进行定制,做网站、成都网站制作构思过程中功能建设理应排到主要部位公司做网站、成都网站制作的运用实际效果公司网站制作网站建立与制做的实际意义1. 如果有三个相同棋⼦在连续相邻的格⼦上,称为三连,计⼀分。
2. 相邻是包括横竖斜⽅向上的相邻。
3. 两组三连只要不完全重复,可以分别计⼀分。 以下图为例:
对于玩家A(棋⼦是O):
4. 横着的三连总共有4组,如图所⽰:
第⼀⾏三连计1分, 第⼆⾏有连续4个棋⼦相邻,可以拆分出两组三连,各计1分共2分。 第三⾏三连计1分。
5. 竖着的三连共4组,和横着的情况类似
6. 斜着的三连共3组,如图所⽰:
所以玩家A的总分是4+4+3=11 对于玩家B(棋⼦是X):没有任何3个棋⼦是连续相邻的,所以总得分是0 输⼊:10×10的棋盘局⾯,玩家A棋⼦是O,玩家B棋⼦是X,空地⽤"."表⽰ 输出:两⾏,第⼀⾏是玩家A得分,第⼆⾏是玩家B得分 样例输⼊ Plain Text ........XX X....X.... ......X... ...OOO.... ...OOOOX.. ...OOO.... ....O..... .X....X.X. ........X. .......... 1 2 3 4 5 6 7 8 9 10 样例输出 11 0
代码:
#include#include
#includeusing namespace std;
int a[10][10]={0};
int resa=0,resb=0;
void dfsa(int i, int j) {
if (i<= 7) {
if (a[i][j] == 1 && a[i + 1][j] == 1 && a[i + 2][j] == 1) {
resa++;
}
}
if (j<= 7) {
if (a[i][j] == 1 && a[i ][j+1] == 1 && a[i ][j+2] == 1) {
resa++;
}
}
if (i<= 7 && j<= 7) {
if (a[i][j] == 1 && a[i+1][j + 1] == 1 && a[i+2][j + 2] == 1) {
resa++;
}
}
if (i >= 3 && j >= 3) {
if (a[i][j] == 1 && a[i - 1][j + 1] == 1 && a[i - 2][j + 2] == 1) {
resa++;
}
}
}
void dfsb(int i, int j) {
if (i<= 7) {
if (a[i][j] == 2 && a[i + 1][j] == 2 && a[i + 2][j] == 2) {
resb++;
}
}
if (j<= 7) {
if (a[i][j] == 2 && a[i][j + 1] == 2 && a[i][j + 2] == 2) {
resb++;
}
}
if (i<= 7 && j<= 7) {
if (a[i][j] == 2 && a[i + 1][j + 1] == 2 && a[i + 2][j + 2] == 2) {
resb++;
}
}
if (i >= 3 && j >= 3) {
if (a[i][j] == 2 && a[i - 1][j + 1] == 2 && a[i - 2][j + 2] == 2) {
resb++;
}
}
}
int main() {
char x;
for (int i = 0; i< 10; i++) {
for (int j = 0; j< 10; j++) {
cin >>x;
if (x == '.') {
a[i][j] = 0;
}
else if (x == 'X') {
a[i][j] = 2;
}else if(x == 'O') {
a[i][j] = 1;
}
}
}
for (int i = 0; i< 10; i++) {
for (int j = 0; j< 10; j++) {
if (a[i][j] == 0) {
continue;
}
if (a[i][j] == 1) {
dfsa(i, j);
}
if (a[i][j] == 2) {
dfsb(i, j);
}
}
}
cout<< resa<< endl<< resb;
return 0;
}
你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧