2020.11.28-團體天梯賽補題


1. 嫑廢話上代碼

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int a,b,c;
    cin>>a>>b>>c;
    cout<<a*b*c<<endl;
}
View Code

洛希極限

#include<bits/stdc++.h>
using namespace std;
int main()
{
    float a,b;
    int x;
    cin>>a>>x>>b;
    float sum=0;
    if(x==0)
    {
        sum=a*2.455;
        if(sum<b)printf("%.2f ^_^",sum);
        else printf("%.2f T_T",sum);
    }
    else
    {
        sum=a*1.26;
        if(sum<b)printf("%.2f ^_^",sum);
        else printf("%.2f T_T",sum);
    }
}
View Code

 

調和平均

N 個正數的算數平均是這些數的和除以 N,它們的調和平均是它們倒數的算數平均的倒數。本題就請你計算給定的一系列正數的調和平均值。

輸入格式:

每個輸入包含 1 個測試用例。每個測試用例第 1 行給出正整數 N (≤);第 2 行給出 N 個正數,都在區間 [ 內。

輸出格式:

在一行中輸出給定數列的調和平均值,輸出小數點后2位。

輸入樣例:

8
10 15 12.7 0.3 4 13 1 15.6
 

輸出樣例:

1.61

 失掉一分的原因是:用的數組存的數據,改成一個變量直接輸入運算對了

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int n;
    cin>>n;
    //double s[n+5];
    double sum=0,a;
    for(int i=0;i<n;i++)
    {
       // cin>>s[i];
        cin>>a;
        sum+=1*1.000/a;
    }
  
        printf("%.2lf\n",n*1.000/sum);
   
    
}

 

 

胎壓監測

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int s[10],a,b;
    int maxn=-1;
    for(int i=0;i<4;i++)
    {
        cin>>s[i];
        maxn=max(maxn,s[i]);
    }
    cin>>a>>b;
    int k=0,ct=0,j;
    for(int i=0;i<4;i++)
    {
        if(maxn-s[i]>b||s[i]<a)
        {
            k=1;
            ++ct;
            j=i+1;
            if(ct>=2)
            {
                k=2;
                break;
            }
        }
    }
    if(k==0)cout<<"Normal"<<endl;
    else if(k==1)cout<<"Warning: please check #"<<j<<"!"<<endl;
    else cout<<"Warning: please check all the tires!"<<endl;
    
}
View Code

吃火鍋

 

chg.jpg

以上圖片來自微信朋友圈:這種天氣你有什么破事打電話給我基本沒用。但是如果你說“吃火鍋”,那就厲害了,我們的故事就開始了。

本題要求你實現一個程序,自動檢查你朋友給你發來的信息里有沒有 chi1 huo3 guo1

輸入格式:

輸入每行給出一句不超過 80 個字符的、以回車結尾的朋友信息,信息為非空字符串,僅包括字母、數字、空格、可見的半角標點符號。當讀到某一行只有一個英文句點 . 時,輸入結束,此行不算在朋友信息里。

輸出格式:

首先在一行中輸出朋友信息的總條數。然后對朋友的每一行信息,檢查其中是否包含 chi1 huo3 guo1,並且統計這樣厲害的信息有多少條。在第二行中首先輸出第一次出現 chi1 huo3 guo1 的信息是第幾條(從 1 開始計數),然后輸出這類信息的總條數,其間以一個空格分隔。題目保證輸出的所有數字不超過 100。

如果朋友從頭到尾都沒提 chi1 huo3 guo1 這個關鍵詞,則在第二行輸出一個表情 -_-#

輸入樣例 1:

Hello!
are you there?
wantta chi1 huo3 guo1?
that's so li hai le
our story begins from chi1 huo3 guo1 le
.
 

輸出樣例 1:

5
3 2
 

輸入樣例 2:

Hello!
are you there?
wantta qi huo3 guo1 chi1huo3guo1?
that's so li hai le
our story begins from ci1 huo4 guo2 le
.
 

輸出樣例 2:

5
-_-#

 比賽時是下面代碼遍歷處出了錯,運行時間長了,還忘了找到時要跳出

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int ct=0,k=0,j=1,p=0;
    while(1)
    {
        string s,b;
        getline(cin,s);
        if(s==".")break;
        int m;
        m=s.size();
        for(int i=0;i<m;i++)
        {
            if(s[i]=='c')//**/
            {
                b=s.substr(i,14);
                if(b=="chi1 huo3 guo1")
                {
                    p=1;
                    ++ct;
                    if(ct==1)k=j;
                    break;//****/
                }
            }
        }
        ++j;
    }
     if(p==0)
    {
        cout<<j-1<<endl;
        cout<<"-_-#"<<endl;
    }
    else
    {
        cout<<j-1<<endl;
        cout<<k<<" "<<ct<<endl;
    }
}

前世檔案

qs.jpg

網絡世界中時常會遇到這類滑稽的算命小程序,實現原理很簡單,隨便設計幾個問題,根據玩家對每個問題的回答選擇一條判斷樹中的路徑(如下圖所示),結論就是路徑終點對應的那個結點。

path.jpg

現在我們把結論從左到右順序編號,編號從 1 開始。這里假設回答都是簡單的“是”或“否”,又假設回答“是”對應向左的路徑,回答“否”對應向右的路徑。給定玩家的一系列回答,請你返回其得到的結論的編號。

輸入格式:

輸入第一行給出兩個正整數:N(≤)為玩家做一次測試要回答的問題數量;M(≤)為玩家人數。

隨后 M 行,每行順次給出玩家的 N個回答。這里用 y 代表“是”,用 n 代表“否”。

輸出格式:

對每個玩家,在一行中輸出其對應的結論的編號。

輸入樣例:

3 4
yny
nyy
nyn
yyn
 

輸出樣例:

3
5
6
2

題解:完全二叉樹的節點

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int n,m;
    cin>>n>>m;
    string s;
    while(m--)
    {
        cin>>s;
        int ct=1;
        for(int i=0;i<n;i++)
        {
            if(s[i]=='y')
            {
                ct=ct*2;
            }
            else ct=ct*2+1;
        }
        //cout<<ct<<endl;
        int k=pow(2,n)-1;//減去上一層最后一個節點數值
        cout<<ct-k<<endl;
    }
}

 

 刮刮彩票

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int b[10]={0};
    int s[5][5],a,c,l=1;
    for(int i=1;i<=3;i++)
    {
        for(int j=1;j<=3;j++)
        {
            cin>>s[i][j];
           
            if(s[i][j]==0)//記下為0時的位置
            {
                a=i;
                c=j;
            }
            else b[s[i][j]]=1;
        }
    }
    int m;
    for(int i=1;i<=9;i++)
    {
        if(b[i]==0)
        {
            s[a][c]=i;//*/
           // cout<<s[a][c]<<endl;
            break;
        }
    }
    for(int i=0;i<3;i++)
    {
        int x,y;
        cin>>x>>y;
        cout<<s[x][y]<<endl;
    }
    int w;
    cin>>w;
    int num=0;
    if(w>=1&&w<=3)
    {
        for(int j=1;j<=3;j++)
        {
            num+=s[w][j];
        }
    }
    else if(w>=4&&w<=6)
    {
        for(int i=1;i<=3;i++)
        {
            num+=s[i][w-3];
        }
    }
    else if(w==7)
    {
        num=s[1][1]+s[2][2]+s[3][3];
    }
    else if(w==8)num=s[1][3]+s[2][2]+s[3][1];
    if(num==6)cout<<"10000"<<endl;
    else if (num==7)cout<<"36"<<endl;
    else if (num==8)cout<<"720"<<endl;
    else if (num==9)cout<<"360"<<endl;
    else if (num==10)cout<<"80"<<endl;
    else if (num==11)cout<<"252"<<endl;
    else if (num==12)cout<<"108"<<endl;
    else if (num==13)cout<<"72"<<endl;
    else if (num==14)cout<<"54"<<endl;
    else if (num==15)cout<<"180"<<endl;
    else if (num==16)cout<<"72"<<endl;
    else if (num==17)cout<<"180"<<endl;
    else if (num==18)cout<<"119"<<endl;
    else if (num==19)cout<<"36"<<endl;
    else if (num==20)cout<<"306"<<endl;
    else if (num==21)cout<<"1080"<<endl;
    else if (num==22)cout<<"144"<<endl;
    else if (num==23)cout<<"1800"<<endl;
    else if (num==24)cout<<"3600"<<endl;

}
View Code

簡單計算器

 

cal.jpg

本題要求你為初學數據結構的小伙伴設計一款簡單的利用堆棧執行的計算器。如上圖所示,計算器由兩個堆棧組成,一個堆棧 S1​​ 存放數字,另一個堆棧 S2​​ 存放運算符。計算器的最下方有一個等號鍵,每次按下這個鍵,計算器就執行以下操作:

  1. 從 S1​​ 中彈出兩個數字,順序為 n1​​ 和 n2​​;
  2. 從 S2​​ 中彈出一個運算符 op;
  3. 執行計算 n2​​ op n1​​;
  4. 將得到的結果壓回 S1​​。

直到兩個堆棧都為空時,計算結束,最后的結果將顯示在屏幕上。

輸入格式:

輸入首先在第一行給出正整數 N(1),為 S1​​ 中數字的個數。

第二行給出 N 個絕對值不超過 100 的整數;第三行給出 N1 個運算符 —— 這里僅考慮 +-*/ 這四種運算。一行中的數字和符號都以空格分隔。

輸出格式:

將輸入的數字和運算符按給定順序分別壓入堆棧 S1​​ 和 S2​​,將執行計算的最后結果輸出。注意所有的計算都只取結果的整數部分。題目保證計算的中間和最后結果的絕對值都不超過 1。

如果執行除法時出現分母為零的非法操作,則在一行中輸出:ERROR: X/0,其中 X 是當時的分子。然后結束程序。

輸入樣例 1:

5
40 5 8 3 2
/ * - +
 

輸出樣例 1:

2
 

輸入樣例 2:

5
2 5 8 4 4
* / - +
 

輸出樣例 2:

ERROR: 5/0

堆棧的使用:元素先進后出,當存運算符的棧空時退出

#include<bits/stdc++.h>

using namespace std;
int main()
{
    int n,a,sum;
    char b;
    cin>>n;
    stack<int> s;
    stack<char> w;
    for(int i=0;i<n;i++)
    {
        cin>>a;
        s.push(a);
    }
    for(int j=0;j<n-1;j++)
    {
        cin>>b;
        w.push(b);
    }
    while(1)
    {
        //cout<<s.size()<<" "<<w.size()<<endl;
        if(w.empty())break;
        else {
        int x,y;
        x=s.top();
        s.pop();
        y=s.top();
        s.pop();
        char z;
        z=w.top();
        w.pop();
        //cout<<x<<" "<<y<<" "<<z<<endl;
        if(z=='/'&&x==0)
        {
            cout<<"ERROR: "<<y<<"/0"<<endl;
            return 0;
        }
        else if(z=='*')sum=x*y;
        else if(z=='+')sum=x+y;
        else if(z=='-')sum=y-x;
        else if(z=='/')sum=y/x;
        s.push(sum);
        }
    }
    cout<<sum<<endl;
}

 

完全二叉樹的層序遍歷

一個二叉樹,如果每一個層的結點數都達到最大值,則這個二叉樹就是完美二叉樹。對於深度為 D的,有 N 個結點的二叉樹,若其結點對應於相同深度完美二叉樹的層序遍歷的前 N 個結點,這樣的樹就是完全二叉樹。

給定一棵完全二叉樹的后序遍歷,請你給出這棵樹的層序遍歷結果。

輸入格式:

輸入在第一行中給出正整數 N(≤),即樹中結點個數。第二行給出后序遍歷序列,為 N 個不超過 100 的正整數。同一行中所有數字都以空格分隔。

輸出格式:

在一行中輸出該樹的層序遍歷序列。所有數字都以 1 個空格分隔,行首尾不得有多余空格。

輸入樣例:

8
91 71 2 34 10 15 55 18
 

輸出樣例:

18 34 55 71 2 10 15 91
#include<bits/stdc++.h>
using namespace std;
struct Node
{
    int data;
    int l,r;

}s[100];
void show(int d)//后序遍歷是先左子樹,右子樹再根節點,所以要遍歷到最后無子節點則輸入值
{
    if(s[d].l!=0)show(s[d].l);
    if(s[d].r!=0)show(s[d].r);
    cin>>s[d].data;
}
int main()
{
    int n;
    cin>>n;
    for(int i=1;i<=n;i++)//建立完全二叉樹
    {
        if(i*2<=n)s[i].l=i*2;//完全二叉樹中結點 i 的左子樹編號為2*i,右子樹編號為2*i+1,若無則無該子樹
        if(i*2+1<=n)s[i].r=i*2+1;
    }
    show(1);//樹的編號從根節點1開始
    for(int i=1;i<=n;i++)
    {
        if(i==1)cout<<s[1].data;
        else cout<<" "<<s[i].data;
    }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM