中文字幕理论片,69视频免费在线观看,亚洲成人app,国产1级毛片,刘涛最大尺度戏视频,欧美亚洲美女视频,2021韩国美女仙女屋vip视频

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
校門外的樹

【題目描述】

某校大門外長度為L的馬路上有一排樹,每兩棵相鄰的樹之間的間隔都是1米。我們可以把馬路看成一個數(shù)軸,馬路的一端在數(shù)軸0的位置,另一端在L的位置;數(shù)軸上的每個整數(shù)點,即0,1,2,……,L,都種有一棵樹。

由于馬路上有一些區(qū)域要用來建地鐵。這些區(qū)域用它們在數(shù)軸上的起始點和終止點表示。已知任一區(qū)域的起始點和終止點的坐標(biāo)都是整數(shù),區(qū)域之間可能有重合的部分?,F(xiàn)在要把這些區(qū)域中的樹(包括區(qū)域端點處的兩棵樹)移走。你的任務(wù)是計算將這些樹都移走后,馬路上還有多少棵樹。

【輸入格式】

第一行有兩個整數(shù)L(1 <= L <= 10000)和 M(1 <= M <= 100),L代表馬路的長度,M代表區(qū)域的數(shù)目,L和M之間用一個空格隔開。接下來的M行每行包含兩個不同的整數(shù),用一個空格隔開,表示一個區(qū)域的起始點和終止點的坐標(biāo)。

【輸出格式】

只有一行,這一行只包含一個整數(shù),表示馬路上剩余的樹的數(shù)目。

對于20%的數(shù)據(jù),區(qū)域之間沒有重合的部分;

對于其它的數(shù)據(jù),區(qū)域之間有重合的情況。

【輸入樣例】

500  3

150  300

100  200

470  471

【輸出樣例】

298

【問題解析】

分析數(shù)據(jù)

輸入共M+1行

第一行 兩個整數(shù)L和ML代表馬路的長度,M代表區(qū)域的數(shù)目)

1 <= L <= 10000, 1 <= M <= 100

接下來的M行每行包含兩個不同的整數(shù),用一個空格隔開,表示一個區(qū)域的起始點和終止點的坐標(biāo)。

規(guī)則條件

區(qū)域是閉區(qū)間,里面的樹都要移除,區(qū)間可能會有重合。

要點:所給的區(qū)域起始點終止點坐標(biāo)并未說明誰大誰小,比如30 50和50 30等價,但是在寫程序時要做這個判斷。

輸出結(jié)果

一個整數(shù),剩余樹的棵數(shù)。

題目意思:長為L的馬路上,在0~L上每隔一米就有一棵樹,所以一共有L+1棵。由于要修地鐵,要把指定區(qū)域的樹移除,比如給出30 50,就表明第30米到50米的樹都移除?,F(xiàn)在給出馬路長度L、要移除樹的區(qū)域個數(shù)M以及M個區(qū)間,求剩下多少棵樹。

這里有一個點要特別注意,題目所給的區(qū)域起始點和終止點坐標(biāo)并未說明誰大誰小,比如30 50和50 30等價,但是在寫程序時要做這個判斷。

解題思路與步驟

讀入數(shù)據(jù):

int L,M,flag=0,t; //L為路長,M為區(qū)域數(shù),flag用來統(tǒng)計剩余的數(shù)。

    scanf("%d%d",&L,&M);

    int a[10001];

    for(int i=0;i<=L;i++)

a[i]=1;

將M個區(qū)域內(nèi)的樹都移除

    int p,q;//倆坐標(biāo)軸

    for(int i=0;i<M;i++)

    {

scanf("%d%d",&p,&q);

        if(p>q)

        {

            t=p;

            p=q;

            q=t;

        }

        for(int j=p;j<=q;j++)

        {

a[j]=0;

        }

}

要點:

1. 外層for循環(huán)是遍歷M個區(qū)域。

2. 讀入?yún)^(qū)域起始點坐標(biāo)和終點坐標(biāo)時要判斷大小,要保證起始點坐標(biāo)不大于終點坐標(biāo)。

3. 內(nèi)層的for循環(huán)用來將樹移除。

統(tǒng)計剩余樹

    for(int i=0;i<=L;i++)

    {

if(a[i]==1)// 表示該地方樹還在

flag++;

    }

要點:

數(shù)組a中元素,其中仍為1的表示該地方樹還在,進(jìn)行統(tǒng)計。

輸出

    printf("%d",flag);

要點:

flag的初值為0。

題目大意與要求分析完了,來看看如何解題:

第一步:讀入數(shù)據(jù)。首先讀入兩個整數(shù)L,M。再用一個數(shù)組,里面的前L個元素初值置為1,表示有L棵樹。

    int L,M,flag=0,t;

    scanf("%d%d",&L,&M);

    int a[10001];

    for(int i=0;i<=L;i++)

a[i]=1;

第二步:將M個區(qū)域內(nèi)的樹都移除。這是最為重要的一步,首先使用for循環(huán)遍歷每個區(qū)域,接著移除每個區(qū)域內(nèi)的樹;要移除每個區(qū)域內(nèi)的樹,先用兩個整型變量p,q讀取區(qū)域的起始點坐標(biāo)終點坐標(biāo),如果起始點坐標(biāo)大于終點坐標(biāo),則兩個數(shù)交換。再將表示樹的數(shù)組a中下標(biāo)p到q的元素置為0,表示樹已經(jīng)移除。此時該區(qū)域的樹已經(jīng)移除完畢,進(jìn)行下一個區(qū)域的操作,直到循環(huán)結(jié)束。

    int p,q;

    for(int i=0;i<M;i++)

    {

scanf("%d%d",&p,&q);

        if(p>q)

        {

            t=p;

            p=q;

            q=t;

        }

        for(int j=p;j<=q;j++)

        {

a[j]=0;

        }

}

第三步:統(tǒng)計還剩余多少樹。用for循環(huán)遍歷數(shù)組a前L個元素,其中仍為1的表示該地方樹還在,進(jìn)行統(tǒng)計。

    for(int i=0;i<=L;i++)

    {

if(a[i]==1)

flag++;

    }

第四步:輸出。輸出剩余樹的棵數(shù)。

printf("%d",flag);

實現(xiàn)代碼

#include <iostream>

#include <cstdio>

using namespace std;

int main()

{

    int L,M,flag=0,t;

    scanf("%d%d",&L,&M);

    int a[10001];

    for(int i=0;i<=L;i++)

a[i]=1;

    int p,q;

    for(int i=0;i<M;i++)

    {

              scanf("%d%d",&p,&q);

        if(p>q)

        {

            t=p;

            p=q;

            q=t;

        }

        for(int j=p;j<=q;j++)

        {

a[j]=0;

        }

    }

    for(int i=0;i<=L;i++)

    {

if(a[i]==1)

flag++;

    }

    printf("%d",flag);

    return 0;

}

本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
第三周作業(yè)
3.24
C語言期中考試試題A標(biāo)準(zhǔn)答案
04-樹4 是否同一棵二叉搜索樹
C語言練習(xí)題精選
hdu1710-求二叉樹后序遍歷
更多類似文章 >>
生活服務(wù)
熱點新聞
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服