Five Tiger(模拟)

题目描述

五虎棋是流传在东北民间的一种游戏,GG小的时候,经常被表哥虐得很惨。
由于各个地区的规则可能不大相同,并且GG的回忆不一定很准,所以,如果规则和你平常玩的的有冲突,请以这里为主。
棋盘是横五条,纵五条直线,形成25个交叉点,双方轮流把棋子放到交叉点上 (由于所需各自和棋子数目不多,才12+13,GG小的时候,用的是象棋的棋盘和棋子,真的用大棋盘很爽~~~)
当双方把棋盘下满之后(先手下了13个棋子,后手下了12个棋子),根据双方摆成的阵型来算分。 (当然,算分之后,还有提掉对方相应个数的棋子,然后棋子一格一格的挪动,继续形成阵型,提掉对方的棋子神码的,GG表述不明白,也就不再后续问题上出题了)
现在GG想让你帮忙算,双方摆成的阵型,分别得分多少? 

其中记分的阵型有(用o表示棋子落点)
大五虎(10分) 
要求占据了四个角落和最中间的位置

o...o
.....
..o..
.....
o...o

五虎(5分): 
摆成形如下图的阵势

o.o
.o.
o.o

通天(5分):
横着/竖着/斜着 五个棋子连成一条直线,如

.....	..o..	o....
ooooo	..o..	.o...
.....	..o..	..o..
.....	..o..	...o.
.....	..o..	....o

四斜(4分):
严格定义,GG说不明白,总之只有以下四种

...o.	.....	.....	.o...
..o..	o....	....o	..o..
.o...	.o...	...o.	...o.
o....	..o..	..o..	....o
.....	...o.	.o...	.....

三斜(3分):
严格定义,GG说不明白,总之只有以下四种

..o..	.....	.....	..o..
.o...	.....	.....	...o.
o....	o....	....o	....o
.....	.o...	...o.	.....
.....	..o..	..o..	.....

小斗(1分): 
四个棋子形成一个最小正方形

oo
oo

例1

o...o
.o.o.
..o..
.oooo
o..oo

o这名玩家形成了 1个大五虎(10分), 1个小五虎(5分), 2个通天(10分), 1个小斗(1分). 总分:10 + 5 + 10*2 + 1 = 36 

例2

.o.o.
o.o.o
.o.o.
o.o.o
.o.o.

o这名玩家形成了 4个小五虎, 4个四斜 总分 5*4 + 4*4 = 36

输入

多组测试数据。首先是一个整数T ( 1 ≤ T ≤ 10000 ),占一行,表示测试数据的组数.
对于每组测试数据,占6行。 首先是一个空行 接下来的五行,表示一个局势。 也就是说,每行5个字符(x表示先手, o表示后手,也就是说,会有13个x和12个o)

输出

对于每组测试数据,输出一行. 结果为两个整数,之间用一个空格隔开,分别表示先手(x)的得分,和后手(o)的得分。

样例输入
2

oxxxo
xoxox
xxoxx
xoooo
oxxoo

xoxox
oxoxo
xoxox
oxoxo
xoxox
样例输出
9 26
57 36
  1 #include <stdio.h>
  2 #include <iostream>
  3 using namespace std;
  4 char a[10][10];
  5 
  6 int dafu(char c)
  7 {
  8     if(a[1][1]==c && a[1][5]==c && a[3][3]==c && a[5][1]==c && a[5][5]==c) return 10;
  9     return 0;
 10 }
 11 int xiaofu(char c)
 12 {
 13     int t=0;
 14     for(int i=1; i<=3; i++)
 15     {
 16         for(int j=1; j<=3; j++)
 17         {
 18             if(a[i][j]==c && a[i][j+2]==c && a[i+1][j+1]==c && a[i+2][j]==c && a[i+2][j+2]==c) t+=5;
 19         }
 20     }
 21     return t;
 22 }
 23 int tongtian(char c)
 24 {
 25     int t=0;
 26     for(int i=1; i<=5; i++)
 27     {
 28         if(a[i][1]==c && a[i][2]==c && a[i][3]==c && a[i][4]==c && a[i][5]==c) t+=5;
 29         if(a[1][i]==c && a[2][i]==c && a[3][i]==c && a[4][i]==c && a[5][i]==c) t+=5;
 30     }
 31     if(a[1][1]==c && a[2][2]==c && a[3][3]==c && a[4][4]==c && a[5][5]==c) t+=5;
 32     if(a[5][1]==c && a[4][2]==c && a[3][3]==c && a[2][4]==c && a[1][5]==c) t+=5;
 33     return t;
 34 }
 35 int sixie(char c)
 36 {
 37     int t=0;
 38     if(a[1][4]==c && a[2][3]==c && a[3][2]==c && a[4][1]==c) t+=4;
 39     if(a[2][5]==c && a[3][4]==c && a[4][3]==c && a[5][2]==c) t+=4;
 40     if(a[2][1]==c && a[3][2]==c && a[4][3]==c && a[5][4]==c) t+=4;
 41     if(a[1][2]==c && a[2][3]==c && a[3][4]==c && a[4][5]==c) t+=4;
 42     return t;
 43 }
 44 int sanxie(char c)
 45 {
 46     int t=0;
 47     if(a[1][3]==c && a[2][2]==c && a[3][1]==c) t+=3;
 48     if(a[1][3]==c && a[2][4]==c && a[3][5]==c) t+=3;
 49     if(a[3][1]==c && a[4][2]==c && a[5][3]==c) t+=3;
 50     if(a[3][5]==c && a[4][4]==c && a[5][3]==c) t+=3;
 51     return t;
 52 }
 53 int xiaodou(char c)
 54 {
 55     int t=0;
 56     for(int i=1; i<=4; i++)
 57     {
 58         for(int j=1; j<=4; j++)
 59         {
 60             if(a[i][j]==c && a[i][j+1]==c && a[i+1][j]==c && a[i+1][j+1]==c) t+=1;
 61         }
 62     }
 63     return t;
 64 }
 65 
 66 int main()
 67 {
 68     int t;
 69     scanf("%d",&t);
 70     getchar();
 71     while(t--)
 72     {
 73         getchar();
 74         for(int i=1; i<=5; i++)
 75         {
 76             for(int j=1; j<=5; j++)
 77             {
 78                 scanf("%c",&a[i][j]);
 79             }
 80             getchar();
 81         }
 82 
 83 
 84         int s1=0,s2=0;
 85         s1+=dafu('x');
 86         s2+=dafu('o');
 87 
 88         s1+=xiaofu('x');
 89         s2+=xiaofu('o');
 90 
 91         s1+=tongtian('x');
 92         s2+=tongtian('o');
 93 
 94         s1+=sixie('x');
 95         s2+=sixie('o');
 96 
 97         s1+=sanxie('x');
 98         s2+=sanxie('o');
 99 
100         s1+=xiaodou('x');
101         s2+=xiaodou('o');
102 
103         printf("%d %d\n",s1,s2);
104     }
105 
106     return 0;
107 }
View Code

 

转载于:https://www.cnblogs.com/contestant/archive/2013/05/19/3086383.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值