n个数里出现次数大于等于n/2的数

来源:互联网 发布:xp网络共享打印机设置 编辑:程序博客网 时间:2024/06/03 21:31
很简单的一道编程题,在这分享一下我的思路,由于技术能力一般,如有不足请大家指出,共同进步。题目描述:输入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;}
0 0
原创粉丝点击