时间限制:1秒
空间限制:32768K
热度指数:8826
算法知识视频讲解
题目描述
输入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 <string.h>
#define maxn 105
#define maxlen 310
char str[maxlen];
int n=0,a[maxn];
int numans[maxn]; //1~100的出现次数
//判断ch是否是数字字符
int is_num(char ch)
{
return (ch>='0' && ch<='9');
}
//求a的x次方
int mypow(int a,int x)
{
int i;
int mul=1;
for(i=1;i<=x;i++)
mul*=a;
return mul;
}
int main()
{
int i,j,len;
int left,right,num;
gets(str);
i=0;
len=strlen(str);
memset(numans,0,sizeof(numans));
//从字符串中提取数字
while(i<len)
{
if(is_num(str[i]))
{
left=i;
while(is_num(str[i]))
i++;
right=i;
num=0;
for(j=left;j<right;j++)
num+=((str[j]-'0')*mypow(10,right-left-1));
a[n++]=num;
}
i++;
}
//统计数字(a[0]~a[n-1])出现次数,其中n为字符串中的数字个数
for(i=0;i<n;i++)
numans[a[i]]++;
//判断
for(i=1;i<=100;i++)
{
if(numans[i]>=n/2)
printf("%d\n",i);
}
return 0;
}