7-3 祖玛

《祖玛》是由Popcap Games于2004年01月01日开放的一款益智小游戏。游戏目标是尽量消除珠子,以防止珠子滚入轨迹尽头的洞中。

游戏的主角是一只石青蛙,石青蛙会吐出各种颜色的珠子,珠子造型美丽,色彩鲜艳,环绕着石青蛙的是承载珠子的轨道,各种颜色的珠子沿着轨道往前滑动,石青蛙必需遏止珠子滚进轨道终点的洞穴。石青蛙吐出的珠子与轨道上的珠子相结合,颜色相同即可消失得分,当轨道上的所有珠子被消除干净时即取得游戏的胜利。

游戏创意虽较简单;但难度不凡。屏幕中的石头青蛙会吐出颜色各异的珠子,与沿着一条轨迹运行的一串珠子相接,一旦三颗或以上的珠子连在一起,则这几颗珠子即可消失,而且可以产生连锁反应。我们所要做的就是尽量消除珠子,以防止珠子滚入轨迹尽头的洞中。珠子落入洞中即为输掉,所有珠子都消失则为获胜。 现在我们用字符表示珠子,其中r代表红色珠子,b代表蓝色珠子,g代表绿色珠子,y代表黄色珠子;用一个字符串代表轨迹中当前各个珠子;用整数代表青蛙吐出的珠子发射到轨迹中的位置,如1代表放到最前边,2代表放到第一个珠子后边等等。则珠子消失的规则如下:1、当青蛙吐出的珠子到位后,如果与之相邻的珠子颜色与之相同且连续超过3个(包括青蛙吐出的这颗珠子),则所有这些颜色相同且连续的珠子都消失。例如青蛙吐出的珠子为红色,吐到轨迹上的位置为3,轨迹上的珠子为bbrr,则吐出的珠子到位后轨迹上的珠子状态应为bbrrr,三颗红色珠子符合消失条件,要消失,最终轨迹上剩下两颗蓝色的珠子,即bb。在这个例子中吐到轨迹上的位置为3、4或5结果都是一样的,如果为2,则最终的输出结果应为brbrr。2、连锁反应规则为当第一次消失发生后,剩下的两段珠子自然相接,如果相接的两个珠子颜色相同且连续超过三个(包括相接的两个珠子),则这些连续且颜色相同的珠子消失。例如青蛙吐出的珠子为红色,吐到轨迹上的位置为5,轨迹上的珠子为bbggrrrgbbyyy则最终轨迹上应为3颗黄色的珠子。过程为新的红色的珠子加入后导致中间的红色珠子满足消失条件,消失了;红色珠子消失后中间的绿色珠子自然相接,满足连锁反应条件,这些绿色珠子也消失了,同理蓝色的珠子也消失的,最后只剩下3颗黄色的珠子,即yyy。特别要注意的是这里的三颗黄色的珠子虽然数量上够了,但由于未与其他同颜色的珠子相接,所以不满足消失的条件。同样,轨迹上其他地方如果还有连续超过3个眼色相同的珠子(原有的)也不能消失。 现在就请你写一段程序来实现这些游戏规则。

注意:打表过测试用例不给分。

输入格式:

只有一行,分三段,开始是一个字符接着是一个整数,最后是一个字符串。字符代表青蛙吐出的珠子的颜色;整数代表青蛙图出的珠子发射到轨迹中的位置,如1代表放到最前边,2代表放到第一个珠子后边等等;字符串代表轨迹中当前的珠子及相应位置。测试数据保证字符串长度小于100,且其他输入合法。

输出格式:

也只有一行,为青蛙吐出珠子后轨道上珠子的状态,如果轨道上所有的珠子都消失了则输出win。

输入样例:

r 5 bbggrrrgbbyyy

输出样例:

yyy

代码实现:

#include<stdio.h>
#include<string.h>
int main()
{
	char ch;
	int n;
	char s[100];
	scanf("%c",&ch);
	scanf("%d",&n);
	scanf("%s",s);
	int len=strlen(s);
	
	if(n>len+1)
	{
		n=len+1;
	}
	if(n<1)
	{
		n=1;
	}
	
	for(int i=len;i<100;i++)
	{
		s[i]='\0';
	}
	
	for(int i=len;i>=n;i--)//插入字符ch
	{
		s[i]=s[i-1]; 
	}
	s[n-1]=ch;
	
	int startLoc=n-1;//同颜色珠子的起始位置
	int endLoc;//同颜色珠子的终止位置
	
	do
	{
		while(s[startLoc-1]==s[startLoc])
		{
			startLoc--;
		}
		endLoc=startLoc;
		while(s[endLoc]==s[endLoc+1])
		{
			endLoc++;
		}
		if(endLoc-startLoc>=2)//消除珠子
		{
			for(int i=startLoc;i<=len;i++)
			{
				s[i]=s[i+endLoc-startLoc+1];
			}
		}
	}while(startLoc>0&&s[startLoc-1]==s[startLoc]);//startLoc>0必须在前面,否则数组越界
	
	if(strlen(s)!=0)
	{
		printf("%s\n",s);
	}
	else
	{
		printf("win\n");
	}
	
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值