1. 程式人生 > 其它 >藍橋杯—螞蟻感冒(C語言)

藍橋杯—螞蟻感冒(C語言)

題目描述

輸出描述

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

輸入輸出樣例

輸入

3
5 -2 8

輸出

1

思路

  1. 將輸入的螞蟻按絕對值大小排序,排序前要記錄第一個螞蟻的大小,方便在排序後進行尋找。
  2. 如果第一隻螞蟻向右走,則會感染它右邊向左走的螞蟻,同時這些被感染的向左走的螞蟻還會感染第一隻螞蟻左邊向右走的螞蟻。
  3. 同理,如果第一隻螞蟻向左走,會感染它左邊向右走的螞蟻,這些被感染的螞蟻還會感染第一隻螞蟻右邊向左走的螞蟻。

程式碼

#include<stdio.h>
int w[60]; 
int main(){
	int n,i,j,tem1,tem2,tem3,start,res=1;
	scanf("%d",&n);
	for(i=1;i<=n;i++){
		scanf("%d",&w[i]);
	}
	start=w[1];
	for(i=1;i<n;i++){
		for(j=i+1;j<=n;j++){
			if(w[i]<0)tem1=-w[i];
			else tem1=w[i];
			if(w[j]<0)tem2=-w[j];
			else tem2=w[j];
			if(tem1>tem2){
				tem3=w[i];
				w[i]=w[j];
				w[j]=tem3;
			}
		}
	}
	for(i=1;i<=n;i++){
		if(w[i]==start){//根據記錄的第一隻螞蟻的值,找到目前第一隻螞蟻的所在位置
			start=i;break;
		}
	}
	if(w[start]>0){//第一隻螞蟻向右走
		for(i=start+1;i<=n;i++){
			if(w[i]<0){
				res++;
			}
		}
			for(i=start-1;i>=1;i--){
				if(w[i]>0){
					res++;
				}
			}
	}	
	if(w[start]<0){
		for(i=start-1;i>=1;i--){
			if(w[i]>0){
				res++;
			}
		}
			for(i=start+1;i<=n;i++){
				if(w[i]<0)res++;
			}
	}
	printf("%d",res);
	return 0;
}