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; }