很简单的一道编程题,在这分享一下我的思路,由于技术能力一般,如有不足请大家指出,共同进步。
题目描述:
输入n个整数,输出出现次数大于等于数组长度一半的数。
输入描述:
每个测试输入包含 n个空格分割的n个整数,n不超过100,其中有一个整数出现次数大于等于n/2。
输出描述:
输出出现次数大于等于n/2的数。
输入例子:
3 9 3 2 5 6 7 3 2 3 3 3
输出例子:
3
我的思路:首先输入n个数,由于这里没有给定n,所以我用一个字符串来存储这n个数。然后将输入的字符串转化成数字。这里主要是转化,我是将字符串从后向前转化,因为字符串和数字的ASCII码相差48,所以将字符串减去48即可得到数字。
这里还要注意字符串“123”转化为数字应该是1*100+2*10+3*1。
代码:
#include <iostream>
#include <string.h>
#include <math.h>
using namespace std;
int main()
{
char str[202];
int a[101];//存储数字,这里可以进行动态开辟数组
gets(str);
int len = strlen(str);
int i,j=0;
for(i=len-1;i>=0;) {
int sum=0;
int ling = -1;//判断个、十、百...位
int flag = 0;
while(str[i]!=' ' && i>=0){
if(str[i]!='-') {
ling++;
sum+=(str[i]-48)*pow(10,ling);
}
else{
flag = 1;
}
i--;
}
if(flag)
a[j] = sum*(-1);
else
a[j] = sum;
j++;
i--;
}
for(i=0;i<j;i++)
{
int account= 1;
int number;
for(int k=i+1;k<j;k++)
{
if(a[i]==a[k])
{
account++;
number = a[k];
}
}
if(account>=j/2){
cout<<number;
break;
}
}
return 0;
}