201612-1 中間數

問題描述
試題編號: 201612-1
試題名稱: 中間數
時間限制: 1.0s
內存限制: 256.0MB
問題描述:
問題描述
  在一個整數序列a1a2, …, an中,如果存在某個數,大於它的整數數量等於小於它的整數數量,則稱其爲中間數。在一個序列中,可能存在多個下標不相同的中間數,這些中間數的值是相同的。
  給定一個整數序列,請找出這個整數序列的中間數的值。
輸入格式
  輸入的第一行包含了一個整數n,表示整數序列中數的個數。
  第二行包含n個正整數,依次表示a1a2, …, an
輸出格式
  如果約定序列的中間數存在,則輸出中間數的值,否則輸出-1表示不存在中間數。
樣例輸入
6
2 6 5 6 3 5
樣例輸出
5
樣例說明
  比5小的數有2個,比5大的數也有2個。
樣例輸入
4
3 4 6 7
樣例輸出
-1
樣例說明
  在序列中的4個數都不滿足中間數的定義。
樣例輸入
5
3 4 6 6 7
樣例輸出
-1
樣例說明
  在序列中的5個數都不滿足中間數的定義。
評測用例規模與約定
  對於所有評測用例,1 ≤ n ≤ 1000,1 ≤ ai ≤ 1000。

解題思路:

這道題其實使用for循環嵌套就好了

總的來說就是每次按順序提取原來數組的數字,然後遍歷整個數組,記錄這個數組當中小於這個數的元素個數,和大於這個數的元素個數,如果兩個個數相同,那麼這個就是中間數,因爲中間數的數值是相同的,找到了之後就可以馬上break然後進行輸出。

注意不存在中間數的話就要輸出-1

#include<iostream>
using namespace std;
int main()
{
	int arr[1010]={0};//儲存初值 
	int n=0;
	while(cin>>n)//輸入究竟有多少個數字 
	{
		for(int i=0;i<n;i++)//儲存每個數字 
		cin>>arr[i];
		bool here=false;//標記是否存在中間數 
		for(int i=0;i<n;i++)
		{
			int less=0;//記錄小於這個數的元素個數 
			int more=0;//記錄大於這個數的元素個數 
			int tmp=arr[i];
			for(int j=0;j<n;j++)//每次的從頭遍歷 
			{
				if(arr[j]<tmp)
				less++;
				if(arr[j]>tmp)
				more++;
			}
			if(less==more)
			{
				here=true;
				cout<<tmp<<endl;
				break;
			}
		}
		if(here==false)
		{
			cout<<"-1"<<endl;
		}
	}	
}



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