C/C++ 读入一个整型数组,数组大小未知

链接: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
#include 
using namespace std;
int main(){
	int tem,cou=0,a[100];
	map 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::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,即为真)

你可能感兴趣的:(C++/VC++/MFC)