谁是组长

八中信息组需要选一个组长。信息组一共有n个人,分别用1到n编号,其中m个人参与了投票。得票数过半(票数大于m div 2)的人将被选为组长。

输入数据将告知这m个人分别将票投给了谁,请统计出谁将担任八中信息组的组长。

输入格式   第一行两个数n和m。
   第二行有m个数,这些数都是不超过n的正整数,表明这m个人的选择。
输出格式   输出将被选为组长的人。如果没有人的票数过半,请输出-1。
输入样例 7 4 7 7 2 7 输出样例 7
方法一:

#include 
#include 
using namespace std;

int main()
{
    long int n;    //为保险,不超出范围
    int m=0;//n个人,m个人投票
    int b[10000]={0};
    int o=0;    //某个人的投票数
    int flag=0;    //是否存在符合标准的人
    scanf("%ld%d",&n,&m);
    for(int i=0;ib[j+1])
            {int t=b[j];
            b[j]=b[j+1];
            b[j+1]=t;
            }
        }
        }//投票冒泡;
    for(int j=0;jm/2)
              { printf("%d",b[k]);
                flag=1;
                break;}
        }
        if(flag==1) break;
    }
    if(o

主要思想是:用一个数组把所有投票结果存起来,再冒泡排序,最后从头开始扫一遍,看是否有符合要求的人,但很容易超时,可以引入快排函数qsort对数组进行排序,改进版如下:
方法二:

#include 
#include 
using namespace std;
int cmp ( const void *a , const void *b ) {
    return *(int *)a - *(int *)b;
}
int main()
{
    long int n;    //为保险,不超出范围
    int m=0;//n个人,m个人投票
    int b[10000]={0};
    int o=0;    //某个人的投票数
    int flag=0;    //是否存在符合标准的人
    scanf("%ld%d",&n,&m);
    for(int i=0;im/2)
              { printf("%d",b[k]);
                flag=1;
                break;}
        }
        if(flag==1) break;
    }
    if(o

你可能感兴趣的:(c++,c语言)