[藍橋杯][歷屆試題]螞蟻感冒
阿新 • • 發佈:2018-11-05
http://www.dotcpp.com/oj/problem1454.html
題目描述
長100釐米的細長直杆子上有n只螞蟻。它們的頭有的朝左,有的朝右。
每隻螞蟻都只能沿著杆子向前爬,速度是1釐米/秒。
當兩隻螞蟻碰面時,它們會同時掉頭往相反的方向爬行。
這些螞蟻中,有1只螞蟻感冒了。並且在和其它螞蟻碰面時,會把感冒傳染給碰到的螞蟻。
請你計算,當所有螞蟻都爬離杆子時,有多少隻螞蟻患上了感冒。
輸入
第一行輸入一個整數n (1 < n < 50), 表示螞蟻的總數。
接著的一行是n個用空格分開的整數 Xi (-100 < Xi < 100), Xi的絕對值,表示螞蟻離開杆子左邊端點的距離。正值表示頭朝右,負值表示頭朝左,資料中不會出現0值,也不會出現兩隻螞蟻佔用同一位置。其中,第一個數 據代表的螞蟻感冒了。
輸出
要求輸出1個整數,表示最後感冒螞蟻的數目。
樣例輸入
5 -10 8 -20 12 25
樣例輸出
3
在螞蟻相遇然後向相反方向爬行的過程,可以看成兩隻螞蟻繼續以原來的方向爬行。與最初螞蟻爬行方向相反且在該螞蟻的前方的螞蟻都會感冒,在有螞蟻被感冒後,在該螞蟻后方且爬行方向相同的螞蟻又會感冒。
#include<stdio.h> #define N 120 struct data { int s; int t; }x,a[N]; int main() { int n,i,num,temp,sum; while(scanf("%d",&n)!=EOF) { sum=1; for(i=0;i<101;i++) { a[i].s=0; a[i].t=0; } scanf("%d",&temp); for(i=1;i<n;i++) { scanf("%d",&num); if(num<0) { num=-num; a[num].s=1; a[num].t=-1; } else { a[num].s=1; a[num].t=1; } } if(temp<0) { for(i=0;i<-temp;i++) { if(a[i].s==1&&a[i].t==1) sum++; } if(sum>1) for(i=-temp-1;i<101;i++) if(a[i].s==1&&a[i].t==-1) sum++; } else { for(i=101;i>temp;i--) { if(a[i].s==1&&a[i].t==-1) sum++; } if(sum>1) for(i=temp;i>0;i--) if(a[i].s==1&&a[i].t==1) sum++; } printf("%d\n",sum); } return 0; }