• mooc 数据结构作业(二)祖玛(Zuma)


    描述

    祖玛是一款曾经风靡全球的游戏,其玩法是:在一条轨道上初始排列着若干个彩色珠子,其中任意三个相邻的珠子不会完全同色。此后,你可以发射珠子到轨道上并加入原有序列中。一旦有三个或更多同色的珠子变成相邻,它们就会立即消失。这类消除现象可能会连锁式发生,其间你将暂时不能发射珠子。

    开发商最近准备为玩家写一个游戏过程的回放工具。他们已经在游戏内完成了过程记录的功能,而回放功能的实现则委托你来完成。

    游戏过程的记录中,首先是轨道上初始的珠子序列,然后是玩家接下来所做的一系列操作。你的任务是,在各次操作之后及时计算出新的珠子序列。

    输入

    第一行是一个由大写字母'A'~'Z'组成的字符串,表示轨道上初始的珠子序列,不同的字母表示不同的颜色。

    第二行是一个数字n,表示整个回放过程共有n次操作。

    接下来的n行依次对应于各次操作。每次操作由一个数字k和一个大写字母Σ描述,以空格分隔。其中,Σ为新珠子的颜色。若插入前共有m颗珠子,则k ∈ [0, m]表示新珠子嵌入之后(尚未发生消除之前)在轨道上的位序。

    输出

    输出共n行,依次给出各次操作(及可能随即发生的消除现象)之后轨道上的珠子序列。

    如果轨道上已没有珠子,则以“-”表示。

    样例

    见英文题面

    限制

    0 ≤ n ≤ 10^4

    0 ≤ 初始珠子数量 ≤ 10^4

    时间:2 sec

    内存:256 MB

    提示

    列表

    题意:输入一个字符串,在某个位置插入某个字母,如果有连续3个以上相同的就消除。输出最后的字符串

    思路:完全字符串操作,将字母插入编程完整字符串,然后匹配3个以上的字符删除,知道没有可消除的位置。

    注意:输入字符串可能为空,所以第一行用gets 而不是scanf

    拼接字符串用

    strcpy(tmp,str+i);
    strcpy(str+startpos,tmp);

    而非 strcpy(str+startpos,str+i);

    原因是为什么?我还有些疑问orz

    代码:

     1 #include<cstdio>
     2 #include<cstring>
     3 #include<iostream>
     4 using namespace std;
     5 char str[20005];
     6 int n;
     7 char tmp[20005];
     8 void cal(int t,char ch){
     9     char *p;
    10     p=str;
    11     strcpy(tmp,p+t);
    12     str[t]=ch;
    13     strcpy(str+t+1,tmp);
    14 }
    15 
    16 bool hasRepeat(){
    17     int len=strlen(str);
    18     int i=0;
    19     while(i<len){
    20         char t=str[i];
    21         int startpos=i;
    22         int times=0;
    23         while(i<len&&t==str[i]){
    24             times++;
    25             i++;
    26         }
    27         if(times>=3){
    28     strcpy(tmp,str+i);
    29     strcpy(str+startpos,tmp);
    30     return true;
    31         }
    32     }
    33     return false;
    34 }
    35 int main(){
    36     int t;
    37     char ch;
    38     gets(str);
    39     scanf("%d",&n);
    40     for(int i=0;i<n;i++){
    41         scanf("%d %c",&t,&ch);
    42         cal(t,ch);
    43         while(hasRepeat());
    44         if(strlen(str)==0)
    45             printf("-
    ");
    46         else printf("%s
    ",str);
    47     }
    48 }
    View Code
  • 相关阅读:
    [php learn] php 从头開始学习1
    Qt实现Windows远程控制
    [core java学习笔记][第十一章异常断言日志调试]
    网络安全-安全散列函数,信息摘要SHA-1,MD5原理
    Cardboard虚拟现实开发初步(二)
    C#中Stack&lt;T&gt;类的使用及部分成员函数的源代码分析
    编程算法
    读取spring配置文件的方法(spring读取资源文件)
    Spring中的事务管理详解
    配置spring事务管理的几种方式(声明式事务)
  • 原文地址:https://www.cnblogs.com/Yvettey-me/p/9507767.html
Copyright © 2020-2023  润新知