《祖玛》是由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;
}