藍橋杯 歷屆試題 螞蟻感冒 詳解

2021-07-26 02:51:14 字數 1505 閱讀 1334

問題描述

長100厘公尺的細長直桿子上有n只螞蟻。它們的頭有的朝左,有的朝右。

每只螞蟻都只能沿著桿子向前爬,速度是1厘公尺/秒。

當兩隻螞蟻碰面時,它們會同時掉頭往相反的方向爬行。

這些螞蟻中,有1只螞蟻感冒了。並且在和其它螞蟻碰面時,會把感冒傳染給碰到的螞蟻。

請你計算,當所有螞蟻都爬離桿子時,有多少只螞蟻患上了感冒。

輸入格式

第一行輸入乙個整數n (1 < n < 50), 表示螞蟻的總數。

接著的一行是n個用空格分開的整數 xi (-100 < xi < 100), xi的絕對值,表示螞蟻離開桿子左邊端點的距離。正值表示頭朝右,負值表示頭朝左,資料中不會出現0值,也不會出現兩隻螞蟻占用同一位置。其中,第乙個資料代表的螞蟻感冒了。

輸出格式

要求輸出1個整數,表示最後感冒螞蟻的數目。

樣例輸入3

5 -2 8

樣例輸出

1樣例輸入5

-10 8 -20 12 25

樣例輸出

3寫了乙個半小時,現在把我的思路分享給大家,有不懂或不足希望大家指出

思路:按照第二組輸入數-10 8 -20 12 25,由題可知輸入的第乙個數為感冒的螞蟻即-10,為了方便操作將

陣列元素按照絕對值的從小到大排序,得到如圖所示的樣子,25為什麼要畫個×呢?因為25時向右走的

螞蟻們的速度又一樣,所以25是絕對不會被感冒的

與25相似,假如8的左邊還有乙個-3,也是需要考慮將其排除的(不能只針對給出的幾個運算元,要充分考慮)

在排除兩端的不可能被感冒的後,要從第乙個感冒的螞蟻來考慮了

有兩種情況:

一種是第乙個感冒的螞蟻的向左走

向左走的這種情況要判斷左端是否有螞蟻向右走,向右走的肯定會和第乙個感冒的碰面,被感冒,在判斷右邊的螞蟻是否

有向左走的,有則會被感冒

另一種情況是第乙個螞蟻是向右走

先判斷感冒螞蟻右邊有多少是往左走的,往左走的會被感冒,在左邊的有多少個螞蟻向右走的,有則被感冒

**:

#include#includeusing namespace std;

int main()

} for (i=0;i0) //說明是向右移動,可能會碰到感冒的螞蟻,所以左端的不能去除

break;

else

a[i]=0;

} for (i=n-1;i>c;i++)//排除最右邊的

if (a[c]<0)//說明這只感冒螞蟻是向左端的走的

}if (flag)//說明從左向右走的螞蟻有被感染的,正向右邊襲來

for(i=c+1;i=0;i--)//左邊的

} cout<

藍橋杯 歷屆試題 螞蟻感冒

分析 1 因為只計算數量,所以螞蟻是掉頭還是直接向前走對本題沒有影響 2 如果感冒的螞蟻方向向左 在它左邊的螞蟻 如果向右,則會感染 如果向左則不會感染 在它右邊的螞蟻 如果向右,則不會感染 如果向左 1 如果感冒的那只螞蟻左邊有向右的螞蟻,他會掉頭,則右邊向左的螞蟻會感冒 2 如果感冒的那只螞蟻左...

藍橋杯歷屆試題 螞蟻感冒

問題描述 長100厘公尺的細長直桿子上有n只螞蟻。它們的頭有的朝左,有的朝右。每只螞蟻都只能沿著桿子向前爬,速度是1厘公尺 秒。當兩隻螞蟻碰面時,它們會同時掉頭往相反的方向爬行。這些螞蟻中,有1只螞蟻感冒了。並且在和其它螞蟻碰面時,會把感冒傳染給碰到的螞蟻。請你計算,當所有螞蟻都爬離桿子時,有多少只...

藍橋杯 歷屆試題 螞蟻感冒

這道題分析了一下得出的結論就是最後感冒的螞蟻數量等於絕對值比第乙個感冒的螞蟻的位置大的且方向向左,還有就是比第乙個感冒的螞蟻的位置小的且方向向右。這裡我們很明顯可以發現2個螞蟻碰面之後並沒有什麼影響,2個速度相同的螞蟻同時掉頭不如直接看成速度相同的螞蟻繼續向前走 include include in...