C語言巧用陣列之《校門外的樹》 個人的一些見解

2021-09-17 04:56:40 字數 1970 閱讀 8342

作為乙個閱讀能力比較差的同學,拿到乙個問題描述非常長的題目是很苦惱的一件事。

在複習c語言時,看到acm上的乙個題目,題目描述對我來說是比較長的了,但是題目卻比較簡單。

今天在這篇部落格裡,面對這麼多大佬,賣弄一下,發表一些我的經驗。

讀者可以暫時跳過以下原題部分,直接看我的 個人體會。

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

由於馬路上有一些區域要用來建地鐵。這些區域用它們在數軸上的起始點和終止點表示。已知任一區域的起始點和終止點的座標都是整數,區域之間可能有重合的部分。現在要把這些區域中的樹(包括區域端點處的兩棵樹)移走。你的任務是計算將這些樹都移走後,馬路上還有多少棵樹。

輸入

資料有多組,對於每組輸入:

輸入的第一行有兩個整數l和 m,l代表馬路的長度,m代表區域的數目,l和m之間用乙個空格隔開。接下來的m行每行包含兩個不同的整數,用乙個空格隔開,表示乙個區域的起始點和終止點的座標。

資料範圍

1 <= l <= 10000, 1 <= m <= 100

輸出

對於每組資料:

輸出包括一行,這一行包含乙個整數,表示馬路上剩餘的樹的數目。

樣例輸入

500 3

150 300

100 200

470 471

樣例輸出

298
拿到這個題目之後,我首先是比較煩惱的,看了三遍題目描述才明白是怎麼回事,再看資料的時候發現這就是乙個很簡單的題目。

【簡化描述】

先給定一條線上樹的數量,每隔一公尺一棵樹。有幾段樹要砍掉,在總樹量的那一行給出段數。接下來每一行都將會給出起始位置,即第幾公尺開始到第幾公尺結束。

【解析】

第一眼看到題目,解題思路大致是要去做減法,把要砍掉的樹減去即可。

但是實際操作,構建**體系的時候會發現,這些要砍掉的樹段中會出現重複的現象,做減法顯然已經變得比較麻煩。

由此便可以想到題目中說到的座標軸,不妨用陣列構建乙個座標軸,即先使用相同的資料將座標軸填充,再去用另一種資料代表砍掉的樹。這樣一來題目便簡單多了。

【**&注釋】

#includeint main()

{ int i,j,k,n,m,m,s=0;

//在定義變數的時候,個人是比較習慣盲目地去設一些變數

//比如本題中要使用陣列,便直接將i,j等迴圈使用的變數先設出來

//這裡可以不用先定義陣列,因為不確定陣列的長度(樹總量),所以先掃瞄匯入陣列長度再行定義

scanf("%d %d",&m,&i);

int a[m];

//第一行的資料讀取完了,可以定義陣列和計算次數(要砍的樹段數)了

for(k=0;k<=m;k++)

a[k]=1;

//這個迴圈是使用相同資料填充陣列,即將樹「種上」

for(j=0;j【**】

#includeint main()

{ int i,j,k,m,n,m,s=0;

scanf("%d %d",&m,&i);

int a[m];

for(k=0;k<=m;k++)

a[k]=1;

for(j=0;j【理解】

在我們使用c語言解決問題的時候,可以將要解決的問題理解成乙個工程,指標、陣列是我們要用的大材料。

在構建思路的時候,可以將一些問題抽象化,再簡單化。比如本題中將陣列中的資料抽象成一棵棵樹;再用不同資料表示已經砍掉的樹,這時便在這個抽象的過程中將問題簡化。

C語言 校門外的樹

這題是本人在acm集訓第一天比較卡手的一題,這題說真的在一開始毫無思路,後來才想到用陣列做。某校大門外長度為l的馬路上有一排樹,每兩棵相鄰的樹之間的間隔都是1公尺。我們可以把馬路看成乙個數軸,馬路的一端在數軸0的位置,另一端在l的位置 數軸上的每個整數點,即0,1,2,l,都種有一棵樹。由於馬路上有...

C語言 校門外的樹

演算法提高 校門外的樹 時間限制 1.0s 記憶體限制 256.0mb 問題描述 某校大門外長度為l的馬路上有一排樹,每兩棵相鄰的樹之間的間隔都是1公尺。我們可以把馬路看成乙個數軸,馬路的一端在數軸0的位置,另一端在l的位置 數軸上的每個整數點,即0,1,2,l,都種有一棵樹。由於馬路上有一些區域要...

C語言陣列題 校門外的樹 標記法

某校大門外長度為l的馬路上有一排樹,每兩棵相鄰的樹之間的間隔都是11公尺。我們可以把馬路看成乙個數軸,馬路的一端在數軸00的位置,另一端在ll的位置 數軸上的每個整數點,即0,1,2,l0,1,2,l,都種有一棵樹。由於馬路上有一些區域要用來建地鐵。這些區域用它們在數軸上的起始點和終止點表示。已知任...