五虎棋

五虎棋是流传在东北民间的一种游戏,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
代码如下:
# include <stdio.h>
int tongtian(char a[5][5],char n)//此函数为判断通天的分数 
{
	int i,j=0,m=0,num=0;
	for(j=0;j<5;j++)
	{
	 for(i=0;i<5;i++)
	 { 
	    if(a[i][j]==n)
		{
			m++;
		}	
		if(m==5)
		{
		 num++;
		 m=0;
	    }
	 }
	 m=0;
    }
     for(i=0;i<5;i++)
	{
	 for(j=0;j<5;j++)
	 { 
	    if(a[i][j]==n)
		{
			m++;
		}	
		if(m==5)
		{
		 num++;
		 m=0;
	    }
	 }
	 m=0;
    }
    j=0;
    for(i=0;i<5;i++)
    {
    	if(a[i][j]==n)
    	{
    		j++;
    		m++;
		}
		if(m==5)
		{
			num++;
		}
	}
	m=0;
	j=4;
    for(i=0;i<5;i++)
    {
    	if(a[i][j]==n)
    	{
    		j--;
    		m++;
		}
		if(m==5)
		{
			num++;
		}
	}
	m=0;
	num=num*5;
    return num;
}
int dawuhu(char a[5][5],char n)// 此函数为判断大五虎的分数
{
	int num=0;
	if(a[0][0]==n&&a[0][4]==n&&a[2][2]==n&&a[4][0]==n&&a[4][4]==n)
	{
		num=10;
	}
	return num;
}
int wuhu (char a[5][5],char n )// 此函数为判断五虎的分数
{
	int i=1,j=1,num=0;
	for(i=1;i<=3;i++)
	{
		for(j=1;j<=3;j++)
	     if(a[i][j]==n&&a[i-1][j-1]==n&&a[i-1][j+1]==n&&a[i+1][j-1]==n&&a[i+1][j+1]==n)
	     {
		   num++;
	     }
    }
    num=num*5;
    return num;
}
int sixie(char a[5][5],char n)// 此函数为判断四斜的分数
{
	int num=0;
	if(a[0][3]==n&&a[1][2]==n&&a[2][1]==n&&a[3][0]==n)
	{
		num++;
	}
	if(a[1][0]==n&&a[2][1]==n&&a[3][2]==n&&a[4][3]==n)
	{
		num++;
	}
	if(a[1][4]==n&&a[2][3]==n&&a[3][2]==n&&a[4][1]==n)
	{
		num++;
	}
	if(a[0][1]==n&&a[1][2]==n&&a[2][3]==n&&a[3][4]==n)
	{
		num++;
	}
	num=num*4;
	return num;
}
int sanxie(char a[5][5],char n)// 此函数为判断三斜的分数
{
	int num=0;
	if(a[0][2]==n&&a[1][1]==n&&a[2][0]==n)
	{
		num++;
	}
	if(a[2][4]==n&&a[3][3]==n&&a[4][2]==n)
	{
		num++;
	}
	if(a[2][0]==n&&a[3][1]==n&&a[4][2]==n)
	{
		num++;
	}
	if(a[0][2]==n&&a[1][3]==n&&a[2][4]==n)
	{
		num++;
	}
	num=num*3;
	return num;
}
int xiaodou(char a[5][5],char n)// 此函数为判断小斗的分数
{
	int i,j,num=0;
	for(i=0;i<4;i++)
	{
		for(j=0;j<4;j++)
		{
			if(a[i][j]==n&&a[i+1][j]==n&&a[i][j+1]==n&&a[i+1][j+1]==n)
			{
				num++;
			}
		}
	}
	return num;
}
int main()
{
	char a[5][5],n,m;
	int i,sum1,sum2,w;
	scanf("%d",&w);
	while(w--)
	{
	for(i=0;i<5;i++)
	{
		scanf("%s",a[i]);
	}
	n='o';
	m='x';
	sum1=xiaodou(a,m)+sanxie(a,m)+sixie(a,m)+wuhu(a,m)+dawuhu(a,m)+tongtian(a,m);
	sum2=xiaodou(a,n)+sanxie(a,n)+sixie(a,n)+wuhu(a,n)+dawuhu(a,n)+tongtian(a,n);
	printf("%d %d\n",sum1,sum2); 
    }
	return 0;
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我可以为你提供一些思路和建议。 首先,需要明确脸谱图、星图和南丁格尔图的含义和适用场景。 脸谱图(Facial Chart)是将多个指标进行综合评价后,将结果以人脸的形式展现出来的图表,适用于评估人物的多个方面表现。 星图(Radar Chart)是将多个指标的得分绘制在一个圆形的坐标系中,适用于比较多个对象在多个方面的表现。 南丁格尔玫瑰图(Nightingale Rose Chart)又称为切比雪夫图(Chernoff's Faces),是将多个指标的权重和得分绘制成一个玫瑰形状的图表,适用于比较多个对象在多个方面的表现,并强调不同指标的权重。 接下来,针对蜀国五虎上将的体力、武力、智力、魅力这几个方面,可以考虑如下的可视化方案: 1. 脸谱图:将五虎上将的体力、武力、智力、魅力指标的得分综合评价后,以人脸的形式展现出来。可以通过不同颜色、大小、表情等方式来突出不同指标的分值。 2. 星图:将五虎上将的体力、武力、智力、魅力指标的得分绘制在一个圆形坐标系中。每个指标对应坐标系的一个角度,得分对应该角度上的距离。可以通过不同颜色、线条粗细等方式来突出不同上将的表现。 3. 南丁格尔玫瑰图:将五虎上将的体力、武力、智力、魅力指标的得分和权重绘制成一个玫瑰形状的图表。每个指标对应一个扇形区域,扇形的大小表示权重,扇形的长度表示得分。可以通过不同颜色、线条粗细等方式来突出不同上将的表现。 以上是一些可行的方案,具体的实现需要考虑数据的来源、可视化工具的选择等因素。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值