hdu 1029

来源:互联网 发布:大话手游数据互通列表 编辑:程序博客网 时间:2024/05/18 23:27
//http://acm.hdu.edu.cn/showproblem.php?pid=1029// 这是解法1:直接利用hash就可以快速AC#include<stdio.h>#include<string.h>int main(){  int n,hash[50000],tem,i,j;  while(scanf("%d",&n)!=EOF)  {       memset(hash,0,sizeof(hash));      for(i=1;i<=n;i++)      {          scanf("%d",&tem);          hash[tem]++;          if(hash[tem]>=(n+1)/2)        // 这里开始没有注意到,就是一直wa     /*     其代码是      for(i=1;i<=n;i++)      {          scanf("%d",&tem);          hash[tem]++;      }      for(i=1;i<=n;i++)      {          if(hash[i]>(n+1)/2)             j=i;      }      怎么当时就是没有发现呢?,一直都是wa,仔细想想,这也弱暴了,输入的tem,可能不在1--n之间      ,所以一直都是wa,唉,水平还是那么差       */             j=tem;      }      printf("%d\n",j);  }  return 0;}//解法2: 至今都没有看懂  是在网上看到的#include <stdio.h>#include <stdlib.h>int main()  {      int ans, num, count, n;      while (scanf("%d", &n) != EOF)      {          count = 0;         for (int i=1; i<=n; i++)         {             scanf("%d", &ans);             if (count == 0)             {                 num = ans;                 count ++;             }             else                if (ans == num)                    count++;               else count--;         }         printf("%d\n", num);      }   return 0;   }// 解法3 因为题目说是找众数(难道还要大于一半的?),所以排序后找出最中间的一个数字一定是//代码暂无,主要就是利用sort函数去解决题目,但是不是sort常见的递排序,而是递减拍戏,中间//的a[(n+1)/2]  才是我们要求的那个数字