藍橋杯省賽 螞蟻感冒 模擬

2021-06-29 00:20:58 字數 1516 閱讀 4644

這是一道模擬題

題目:

螞蟻感冒

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

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

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

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

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

【資料格式】

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

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

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

例如,輸入:

35 -2 8

程式應輸出:

1再例如,輸入:

5-10 8 -20 12 25

程式應輸出:

3資料不大,讓n只螞蟻一步一步走就行了。這裡有個坑導致錯了很長時間。螞蟻每秒種走1cm,而我起初是一秒鐘每只螞蟻都走1cm以後判斷在同一位置的為相遇,然後點頭感染等等。沒有考慮螞蟻面對面只相距1cm時,按照走一步1cm的方法下一步他兩將交換位置,而事實上他倆應該在這一步的中間碰撞然後各自回頭(如圖)。所以將步長改為0.5,原來的pos改為double就過了。

double go()//行走函式

if(ants[i].pos>=100)//超過右端的置0

}double sum=0;

//碰撞掉頭,感冒傳染

for(int i=0;i0&&ants[i].pos<100)

else

if(i==0)

ants[i].sick=1;

else

ants[i].sick=0;

}while(sum>0)

for(int i=0;i

藍橋杯 螞蟻感冒 (模擬)

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

藍橋杯 螞蟻感冒 模擬

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

螞蟻感冒 藍橋杯校內賽

歷屆試題 螞蟻感冒 時間限制 1.0s 記憶體限制 256.0mb 問題描述 長100厘公尺的細長直桿子上有n只螞蟻。它們的頭有的朝左,有的朝右。每只螞蟻都只能沿著桿子向前爬,速度是1厘公尺 秒。當兩隻螞蟻碰面時,它們會同時掉頭往相反的方向爬行。這些螞蟻中,有1只螞蟻感冒了。並且在和其它螞蟻碰面時,...