長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【分析】
題目其實不難,雖然說螞蟻碰面後會掉頭,但是完全可以理解為互相穿行而過,這樣題目將會大大簡化。
我們只要找出兩隻螞蟻ant1,和ant2。
ant1代表感冒的,向右走的螞蟻。
ant2代表感冒的,向左走的螞蟻。
這時候答案就明顯了。只要在ant1右邊並且向左走的螞蟻,一定會感冒。
同理,只要在ant2左邊,並且向右走的螞蟻,也一定會感冒。
#include
#include
#include
int cmp(const
void *p1, const
void *p2)
int main()
else
if(ant1<0 && arr[i]<-ant1)}}
if(ant1 < 0)
for(int i=0; iif(ant1 && -arr[i]>ant1)
count ++;
if(ant2 && arr[i]>0 && abs(arr[i])count ++;
}if(ant1 && ant2)
count --;
printf("%d\n",count);
return
0;}
2014 螞蟻感冒
include include includeusing namespace std struct node node a 100 int comp node a1,node a2 int main sort a,a n,comp 按照螞蟻離開桿子左邊端點的距離從小到大排序 int tmp 0,le...
螞蟻感冒 C C
長100厘公尺的細長直桿子上有n只螞蟻。它們的頭有的朝左,有的朝右。每只螞蟻都只能沿著桿子向前爬,速度是1厘公尺 秒。當兩隻螞蟻碰面時,它們會同時掉頭往相反的方向爬行。這些螞蟻中,有1只螞蟻感冒了。並且在和其它螞蟻碰面時,會把感冒傳染給碰到的螞蟻。請你計算,當所有螞蟻都爬離桿子時,有多少只螞蟻患上了...
螞蟻感冒(思維)
x 國的乙個網路使用若干條線路連線若干個節點。節點間的通訊是雙向的。某重要資料報,為了安全起見,必須恰好被 兩次到達目的地。該包可能在任意乙個節點產生,我們需要知道該網路中一共有多少種不同的 路徑。源位址和目標位址可以相同,但中間節點必須不同。如下圖所示的網路。1 2 3 1 是允許的 1 2 1 ...