2021年天梯赛选拔赛第一场 补题/解题

L1-6 吃火锅 (15 分)

首先在一行中输出朋友信息的总条数。然后对朋友的每一行信息,检查其中是否包含 chi1 huo3 guo1,并且统计这样厉害的信息有多少条。在第二行中首先输出第一次出现 chi1 huo3 guo1 的信息是第几条(从 1 开始计数),然后输出这类信息的总条数,其间以一个空格分隔。题目保证输出的所有数字不超过 100。如果朋友从头到尾都没提 chi1 huo3 guo1 这个关键词,则在第二行输出一个表情 -_-#

哟,这次记得用substr那个函数不自己写了

#include <cstdlib>
#include<bits/stdc++.h>
using namespace std;

int main( )
{
    int n=0,a=0,b=0,i;
    string s,s1="chi1 huo3 guo1";
    //cout<<s1.substr(2,5);
    getline(cin,s);
    while(1){
        n++;
        if(s=="."){
            break;
        }
        int x=s.length()-s1.length();
        //cout<<x<<endl;
        for(i=0;i<=x;i++){
            if(s.substr(i,s1.length())==s1){
                b++;
                if(a==0){
                    a=n;
                }
                break;
            }
        }
    s="";

     getline(cin,s);
    }
    cout<<n-1<<endl;
    if(b==0){
        cout<<"-_-#"<<endl;
    }else {
    cout<<a<<" "<<b<<endl;
    }
    return 0;
}

 

L1-8 刮刮彩票 (20 分)

每次游戏玩家会拿到一张彩票,九宫格,分别为数字 1 到数字 9,数字各不重复

在游戏开始时能看见一个位置上的数字,其他位置上的数字均不可见。你可以选择三个位置的数字刮开,这样玩家就能看见四个位置上的数字了。

最后玩家再从 3 横、3 竖、2 斜共 8 个方向中挑选一个方向,方向上三个数字的和可根据下列表格进行兑奖,获得对应数额的金币。

我,哈批,因为左右问题找了半天错误

#include <cstdlib>
#include<bits/stdc++.h>
using namespace std;

int main( )
{

    int a[4][4],i,j,k,y[10]={0};
    int x[30]={0,0,0,0,0,0,10000,36,720,360,80,252,108,72,54,180,72,180,119,36,306,1080,144,1800,3600};
    for(i=0;i<3;i++){
        for(j=0;j<3;j++){
            cin>>a[i][j];
            y[a[i][j]]=1;
            //cout<<y[a[i][j]]<<endl;
        }
    }
    for(i=1;i<10;i++){
        if(y[i]==0){
            k=i;
            //cout<<k<<endl;
            break;
        }

    }
    for(i=0; i<3; i++)
    {
        for(j=0; j<3; j++)
        {
            if(a[i][j]==0)
            {
                a[i][j]=k;
               //cout<<i<<j<<k<<endl;
            }
        }
    }
    for(k=0;k<3;k++){
        cin>>i>>j;
        cout<<a[i-1][j-1]<<endl;
    }
    cin>>i;
    if(i<=3){
        int sum=a[i-1][0]+a[i-1][1]+a[i-1][2];
        cout<<x[sum]<<endl;
    } else if(i<=6){
        int sum=a[0][i-4]+a[1][i-4]+a[2][i-4];
        cout<<x[sum]<<endl;
    }else if(i==8){
        int sum=a[0][2]+a[1][1]+a[2][0];
        cout<<x[sum]<<endl;
    }else if(i==7){
        int sum=a[0][0]+a[1][1]+a[2][2];
        cout<<x[sum]<<endl;
    }
    return 0;
}

 

 

 

 

 

 

L2-3 完全二叉树的层序遍历 (25 分)

题目:一个二叉树,如果每一个层的结点数都达到最大值,则这个二叉树就是完美二叉树。对于深度为 D 的,有 N 个结点的二叉树,若其结点对应于相同深度完美二叉树的层序遍历的前 N 个结点,这样的树就是完全二叉树。给定一棵完全二叉树的后序遍历,请你给出这棵树的层序遍历结果。

虽然但是我选择打表,(建树日常出错qwqqqqqq

#include <cstdlib>
#include<bits/stdc++.h>
using namespace std;
int a[50]={0,16,17,8,18,19,9,4,20,21,10,22,23,11,5,2,24,25,12,26,27,13,6,28,29,14,30,15,7,3,1};
int main( )
{
    int n,b[50],c[50],k=1,i,j;
    cin>>n;
    for(i=1;i<=n;i++){
        cin>>b[i];
    }
    for(i=1;i<=30;i++){
        if(a[i]<=n){
            c[k++]=a[i];
        }
    }
    for(j=1;j<=n;j++){
        for(i=1;i<k;i++){
           if(c[i]==j){
             if(j==1){
                cout<<b[i];
             }else{
                cout<<" "<<b[i];
             }
           }
        }
    }
    cout<<endl;
    return 0;
}

 

posted @ 2021-03-28 22:55  一只幽灵飘过  阅读(182)  评论(1编辑  收藏  举报