m0_63444449 2022-09-08 01:01 采纳率: 79.1%
浏览 156
已结题

与线性表有关的的这俩题该怎样程序实现

  1. 小明很喜欢玩一款名为祖玛的游戏,我们都知道青蛙可以向其中任意一个位置吐一种颜色的球,当有超过三个相同颜色的球挨着的时候,消去他们,小明想知道怎么知道是不是赢了,你能帮助他吗?给定一个包含整数的序列表示一串球,每个数字代表一种独有的颜色,青蛙会有m次向随机的位置吐一种颜色的球(数字),请你帮助小明判断青蛙吐了m次球后有没有赢,如果赢了输出“YES”,输了输出“NO”
    输入的第一行为一个数字,表示序列共有多少个球。第二行为一串数字,代表球序列,接下来一行为一个整数m,(m<100) ,接下来m行为青蛙的m次吐小球,每一行包含一个整数k和一个整数,代表向第k个球后面吐一个球。
    sample input:
    6
    1 1 3 2 2 5
    6
    6 5
    3 3
    2 1
    1 3
    2 2
    1 5
    sample output:
    YES
  2. 小明遇到了一个小小问题,他有一个长度为n的整型数字序列,现在给定三个操作,插入删除和查找,插入即为在指定位置前插入一个整型数据,删除即为删除指定位置的数,查找即给定一个数,找出它在序列中第一次出现的位置,字符I代表插入,字符D代表删除,字符S代表查找。现在你或许可以编写一个程序,来帮助小明解决这个问题。
    输入的第一行为两个整数n和m,(n<100000,m<100) 接下来一行是n个整数,代表这个序列,接下来会有m行操作,操作有3中形式,
    第一种:I 3 5 代表在序列第三个位置前面插入数字5
    第二种:D 4 代表删除序列第四个位置的数据
    第三种:S 8 代表查找在序列中第一次出现整型8的位置,如果查找不到输出-1
    sample input:
    8 5
    1 2 3 4 5 6 7 8
    I 3 5
    I 1 9
    D 2
    S 3
    S 100

sample output:
4
-1

  • 写回答

3条回答 默认 最新

  • 20240357 2022-09-11 16:45
    关注

    考察c++ list的使用

    第一题

    #include<bits/stdc++.h>
    using namespace std;
    list<int> balls;
    list<int>::iterator it;
    void check() {//消除球 
        int lst=-1,combo=0;
        it=balls.begin();
        for(it=balls.begin();it!=balls.end();it++) {
            if(*it!=lst)lst=*it,combo=0;
            combo++;
            if(combo==3)break;
        }
        if(combo<3)return;
        balls.erase(it--);
        balls.erase(it--);
        balls.erase(it--);
    }
    int main() {
        int n,m,x,y;
        cin>>n;
        for(int i=1;i<=n;i++) {
            cin>>x;
            balls.push_back(x);
        }
        cin>>m;
        for(int i=1;i<=m;i++) {
            cin>>x>>y;
            it=balls.begin();
            advance(it,x);
            balls.insert(it,y);
            check();
        }
        if(balls.size()==0)cout<<"YES"; 
        else cout<<"NO";
        return 0; 
    } 
    

    第二题

    #include<bits/stdc++.h>
    using namespace std;
    list<int> nums;
    list<int>::iterator it;
    int search(int x) {
        it=nums.begin();
        int j=0;
        for(;it!=nums.end();it++) {
            j++;
            if(*it==x)return j;
        }
        return -1;
    }
    int main() {
        int n,m,x,y;
        char ch;
        cin>>n>>m;
        for(int i=1;i<=n;i++) {
            cin>>x;
            nums.push_back(x);
        }
        for(int i=1;i<=m;i++) {
            cin>>ch;
            switch(ch) {
                case 'I'://插入 
                    cin>>x>>y;
                    it=nums.begin();
                    advance(it,x-1);
                    nums.insert(it,y);
                    break;
                case 'D'://删除 
                    cin>>x;
                    it=nums.begin();
                    advance(it,x-1);
                    nums.erase(it);
                    break;
                case 'S'://查找
                    cin>>x;
                    cout<<search(x)<<endl;
                    break;
            }
        }
        return 0; 
    } 
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 9月21日
  • 已采纳回答 9月13日
  • 赞助了问题酬金10元 9月10日
  • 修改了问题 9月9日
  • 展开全部

悬赏问题

  • ¥15 想问一下树莓派接上显示屏后出现如图所示画面,是什么问题导致的
  • ¥100 嵌入式系统基于PIC16F882和热敏电阻的数字温度计
  • ¥15 cmd cl 0x000007b
  • ¥20 BAPI_PR_CHANGE how to add account assignment information for service line
  • ¥500 火焰左右视图、视差(基于双目相机)
  • ¥100 set_link_state
  • ¥15 虚幻5 UE美术毛发渲染
  • ¥15 CVRP 图论 物流运输优化
  • ¥15 Tableau online 嵌入ppt失败
  • ¥100 支付宝网页转账系统不识别账号