問題描述
長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問題分析:該題的關鍵就是要理解螞蟻相遇之後掉頭走與螞蟻直接穿行等價。題目中設定第一只螞蟻是感冒的。如果第一只螞蟻向左走,則它首先感染它左邊向右走的螞蟻,他左邊的第一只被感染的螞蟻會感染他右邊向左走的螞蟻。如果第一只螞蟻向右走,則他會先感染他右邊向左走的螞蟻,它的右邊第一只被感染的螞蟻將會感染他左邊向右走的螞蟻。
#include
#include
#define maxn 55
int x[maxn];
int main()
//第一只螞蟻向左走。先求它左邊向右走的螞蟻的數量,如果大於0的話,那麼第一只螞蟻
//的左邊向右走的第一只被感染的螞蟻將會感染第一只螞蟻的右邊向左走的螞蟻;如果等於0,
//則最終只有乙隻螞蟻感冒了。
if(x[0]<0)
}//存在滿足在第一只螞蟻左邊並且向右走的螞蟻,再考慮第一只螞蟻右邊向左走的螞蟻
if(count>1)}}
}//第一只螞蟻向右走。先求它右邊向左走的螞蟻的數量,如果大於0的話,那麼第一只螞蟻
//的右邊向左走的第一只被感染的螞蟻將會感染第一只螞蟻的左邊向右走的螞蟻;如果等於0,
//則最終只有乙隻螞蟻感冒了。
else
if(count>1)}}
printf("%d\n",count);
return
0;}
藍橋杯 螞蟻感冒
時間限制 1 sec 記憶體限制 128 mb 長100厘公尺的細長直桿子上有n只螞蟻。它們的頭有的朝左,有的朝右。每只螞蟻都只能沿著桿子向前爬,速度是1厘公尺 秒。當兩隻螞蟻碰面時,它們會同時掉頭往相反的方向爬行。這些螞蟻中,有1只螞蟻感冒了。並且在和其它螞蟻碰面時,會把感冒傳染給碰到的螞蟻。請你...
藍橋杯 螞蟻感冒
長100厘公尺的細長直桿子上有n只螞蟻。它們的頭有的朝左,有的朝右。每只螞蟻都只能沿著桿子向前爬,速度是1厘公尺 秒。當兩隻螞蟻碰面時,它們會同時掉頭往相反的方向爬行。這些螞蟻中,有1只螞蟻感冒了。並且在和其它螞蟻碰面時,會把感冒傳染給碰到的螞蟻。請你計算,當所有螞蟻都爬離桿子時,有多少只螞蟻患上了...
藍橋杯 螞蟻感冒
問題描述 長100厘公尺的細長直桿子上有n只螞蟻。它們的頭有的朝左,有的朝右。每只螞蟻都只能沿著桿子向前爬,速度是1厘公尺 秒。當兩隻螞蟻碰面時,它們會同時掉頭往相反的方向爬行。這些螞蟻中,有1只螞蟻感冒了。並且在和其它螞蟻碰面時,會把感冒傳染給碰到的螞蟻。請你計算,當所有螞蟻都爬離桿子時,有多少只...