7-3 祖玛 (100分)

在这里插入图片描述

石头青蛙会吐出颜色各异的珠子,与沿着一条轨迹运行的一串珠子相接,一旦三颗或以上的珠子连在一起,则这几颗珠子即可消失,而且可以产生连锁反应。我们所要做的就是尽量消除珠子,以防止珠子滚入轨迹尽头的洞中。珠子落入洞中即为输掉,所有珠子都消失则为获胜。

现在我们用字符表示珠子,其中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(){                 //r 5 bbggrrrgbbyyy
	char ch;
	int x;
	char s[100];
	
	scanf("%c",&ch);
	scanf("%d",&x);
	scanf("%s",s);
	
	int t=strlen(s);
	for(int i=t;i<100;i++){
		s[i]='\0';
	}
	for(int i=t;i>=x;i--){
		s[i]=s[i-1];//将在x位置及之后的珠子均向后挪一位 
	}
	s[x-1]=ch;//插入发射出的珠子 
	
	int l=x-1;
	int r;
	
	do{
		while(s[l-1]==s[l]){
			l--;
		}
		r=l;
		while(s[r]==s[r+1]){
			r++;
		}
		r--;
		//l与r分别为一串相同颜色珠子的起始位置与终止位置的前一位
		//如:s="rrr",则l=0, r=1 
		if(r-l+1>=2){
			for(int i=l;i<=t;i++){
				s[i]=s[i+r-l+2];
			}
		}
	}while(s[l-1]==s[l]);
	if(strlen(s)!=0){
		printf("%s",s);
	}
	else printf("win");
}

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值