模拟祖玛游戏(串)(二)

模拟祖玛游戏(串)(二)

时间: 1ms        内存:1M

描述:

1187的基础上添加两种道具:@#

@:表示消去串中所有相同的超过3个的连续字符,其位置任意,如:33322444555555,输入:@ 1,输出:22

#:表示其插入位置的后一位将转换为与前一位相同,如:223224,输入:# 3,输出:4

输入:

输出:

示例输入:

11112113333444445555

# 5

@ 1

示例输出:

3333444445555

You win!

提示:

参考答案(内存最优[752]):

#include<stdio.h>
#include<string.h>
int main()
{
	char s[30],c,cc;
	int i,n,j;
	gets(s);
	getchar();
	while(strlen(s))
	{
		scanf("%c %d",&c,&n);
		getchar();
		getchar();
		if(c>=48&&c<54){
			for(i=strlen(s);i>=n;i--)
				s[i+1]=s[i];
			s[n]=c;
			cc=0;
		}
		else if(c=='#')
			c=cc=s[n-1]=s[n];
		else if(c=='@')
			cc=c;
		n=0;
		for(i=0;i<strlen(s);i++)
		{
			if(cc=='@'&&s[i]!=c){
				n=0;
				c=s[i];
			}
			if(s[i]==c)
				n++;
			if(n==3)
			{
				int k=0;
				n=0;
				while(s[k]!=c)
					k++;
				j=k;
				while(s[k++]==c)
					n++;
				for(j;s[j]!=0&&s[j+n-1]!=0;j++)
					s[j]=s[j+n];
				if(cc=='@')
				{
					i=0;
					n=0;
				}
			}
		}
		if(strlen(s))
		{
			puts(s);
			putchar('\n');
		}
	}
	printf("You win!\n");
	return 0;
}

参考答案(时间最优[0]):

#include<stdio.h>
#include<string.h>
int main()
{
	char s[30],c,cc;
	int i,n,j;
	gets(s);
	getchar();
	while(strlen(s))
	{
		scanf("%c %d",&c,&n);
		getchar();
		getchar();
		if(c>=48&&c<54){
			for(i=strlen(s);i>=n;i--)
				s[i+1]=s[i];
			s[n]=c;
			cc=0;
		}
		else if(c=='#')
			c=cc=s[n-1]=s[n];
		else if(c=='@')
			cc=c;
		n=0;
		for(i=0;i<strlen(s);i++)
		{
			if(cc=='@'&&s[i]!=c){
				n=0;
				c=s[i];
			}
			if(s[i]==c)
				n++;
			if(n==3)
			{
				int k=0;
				n=0;
				while(s[k]!=c)
					k++;
				j=k;
				while(s[k++]==c)
					n++;
				for(j;s[j]!=0&&s[j+n-1]!=0;j++)
					s[j]=s[j+n];
				if(cc=='@')
				{
					i=0;
					n=0;
				}
			}
		}
		if(strlen(s))
		{
			puts(s);
			putchar('\n');
		}
	}
	printf("You win!\n");
	return 0;
}

题目和答案均来自于互联网,仅供参考,如有问题请联系管理员修改或删除。

点赞

发表评论

电子邮件地址不会被公开。必填项已用 * 标注