C/C++ 讀入一個整型陣列,陣列大小未知

zhonglixianyun發表於2018-08-24

連結:https://www.nowcoder.com/questionTerminal/eac8c671a0c345b38aa0c07aba40097b
來源:牛客網

輸入n個整數,輸出出現次數大於等於陣列長度一半的數。

輸入描述:

每個測試輸入包含 n個空格分割的n個整數,n不超過100,其中有一個整數出現次數大於等於n/2。

輸出描述:

輸出出現次數大於等於n/2的數。

示例1

輸入

3 9 3 2 5 6 7 3 2 3 3 3

輸出

3
#include<stdio.h>
#include <map>
using namespace std;
int main(){
	int tem,cou=0,a[100];
	map<int,int> m;
	char ch;
	while(~scanf("%d%c",&tem,&ch)){  //也可寫成scanf("%d%c",&tem,&ch),結果一樣
		a[cou++]=tem;
		m[tem]++;
		if(ch=='\n'){
			break;
		}
	}
	int l=cou/2;
	map<int,int>::iterator it;
	for (it=m.begin();it!=m.end();it++)
	{
		if (it->second >= l)
		{
			printf("%d\n",it->first);
			break;
		}
	}
	system("pause");
	return 0;
}

這裡~scanf的含義如下:

scanf函式返回成功讀入的資料項數,讀入資料時遇到了“檔案結束”則返回EOF。

scanf("%d %d",&a,&b);    

函式返回值為int型。如果a和b都被成功讀入,那麼scanf的返回值就是2;

如果只有a被成功讀入,返回值為1;

如果a和b都未被成功讀入,返回值為0;

如果遇到錯誤或遇到end of file,返回值為EOF。其中EOF的值為-1

也就是說scanf返回值的取值範圍是大於等於-1的整數,只有返回值為EOF時,其取反的的值,即while迴圈的判斷條件才為0,才能結束迴圈。

(-1的補碼錶示全是1,按位取反後全是0,即為假)其它輸入情況下(無論是否輸入成功),while迴圈的判斷條件為非0,即為真)

相關文章