螞蟻感冒 C/C++

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

【數據要求】

第一行輸入一個整數n (1 < n < 50), 表示螞蟻的總數。接着的一行是n個用空格分開的整數 Xi (-100 < Xi < 100), Xi的絕對值,表示螞蟻離開杆子左邊端點的距離。正值表示頭朝右,負值表示頭朝左,數據中不會出現0值,也不會出現兩隻螞蟻佔用同一位置。其中,第一個數據代表的螞蟻感冒了。

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

【例】輸入:

5

-10 8 -20 12 25

輸出:

3

/*
題目理解:
根據題目,我們可以認爲,螞蟻后健康狀態一致,方向不變,所以就會有兩種情況:
1、一開始與感冒螞蟻前進方向相反的,且在該螞蟻前進方向前方的螞蟻會被影響;
2、存在第一種情況後,與之後感冒的螞蟻前進方向相反且在其前進方向前方的螞蟻也會被影響。
*/
#include<iostream>
#include<algorithm>

using namespace std;

struct Node
{
	int dis;//距離
	int st;//方向:0向左,1向右
}Node[50];
int main()
{
	int num,duf,i,count;
	bool flag=true;//是否存在第一種情況
	count=1;
	cin>>num;
	for(i=0;i<num;i++)//獲取初始距離和方向
	{
		cin>>duf;
		if(duf<0)
		{
			Node[i].dis=(0-duf);
			Node[i].st=0;
		}
		else
		{
			Node[i].dis=duf;
			Node[i].st=1;
		}
	}
	if(Node[0].st==0)//感冒螞蟻向左的情況
	{
		for(i=1;i<num;i++)
		{
			if(Node[i].dis<Node[0].dis&&Node[i].st==1)
			{
				flag=false;
				count++;
			}
		}
		if(flag==false)//第二種情況的處理
		{
			for(i=1;i<num;i++)
			{
				if(Node[i].dis>Node[0].dis&&Node[i].st==0)
				{
					count++;
				}
			}
			flag=true;
		}
	}
	else
	{
		for(i=1;i<num;i++)
		{
			if(Node[i].dis>Node[0].dis&&Node[i].st==0)
			{
				flag=false;
				count++;
			}
		}
		if(flag==false)
		{
			for(i=1;i<num;i++)
			{
				if(Node[i].dis<Node[0].dis&&Node[i].st==1)
				{
					count++;
				}
			}
			flag=true;
		}
	}
	cout<<count<<endl;
	return 0;
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章