模拟祖玛游戏(串)(二)
时间: 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;
}
题目和答案均来自于互联网,仅供参考,如有问题请联系管理员修改或删除。