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] 才是我们要求的那个数字