码迷,mamicode.com
首页 > 其他好文 > 详细

hdu 1029

时间:2018-04-16 10:19:20      阅读:116      评论:0      收藏:0      [点我收藏+]

标签:acm   hdu   

题意是统计输入n(奇数)个数字,输出数量大于等于(n+1)/2的数字。 这个数字的最少为(n+1)/2个,也就是最少比其余数字多一。所以用计数器cnt来记录出现的次数,最后最多的就是所求数。
#include<cstdio>
using namespace std;
int main(){
    int n,num,cnt,result;
    while(~scanf("%d",&n)){
        cnt=0;
        while(n--){
            scanf("%d",&num);
            if(cnt==0){
                cnt=1;
                result=num;
            }
            if(cnt!=0){
                if(result==num)
                    cnt++;
                else
                    cnt--;
            }
        }
        printf("%d\n",result);
    }
    return 0;
}
一开始的代码是这样的,看了半天没发现错误,但是中间的两个if对一次数据执行了两次。

改正后:
#include<cstdio>
using namespace std;
int main(){
    int n,num,cnt,result;
    while(~scanf("%d",&n)){
        cnt=0;
        while(n--){
            scanf("%d",&num);
            if(cnt==0){
                cnt=1;
                result=num;
            }
            else{
                if(result==num)
                    cnt++;
                else
                    cnt--;
            }
        }
        printf("%d\n",result);
    }
    return 0;
}
另一个思路就是排序输出中数:
#include<cstdio>
#include<algorithm>
using namespace std;
int main(){
    int a[1000002],n;
    while(~scanf("%d",&n)){
        while(n--){
            scanf("%d",&a[n]);
            printf("%d\n",n);
        }
        sort(a+1,a+n+1);
        printf("%d\n",a[(n)/2]);
    }
    return 0;
}
这个代码和网上的文章差不多,刚开始超时了,以为这个方法不可以,结果拿别人的文章去试了试,发现是我的错了(话说谁会把不过的方法发出来啊……)
1.数据数量在while 里直接被改动了。所以后面的sort调用会出错。
2.while里的n--直接执行,而不是主语句里的内容执行完后才减1,所以范围依旧是a,a+1。
3.中间数的问题,1~n的中间数为(n+1)/2,但是下标从0开始,也就是说n为奇数,但是长度为偶数n+1,此时中间数为(n-1)/2,感觉还是举例子验算为好。
#include<cstdio>
#include<algorithm>
using namespace std;
int main(){
    int a[1000002],n;
    while(~scanf("%d",&n)){
        int i=n;
        while(n--){
            scanf("%d",&a[n]);
        }
        sort(a,a+i);
        printf("%d\n",a[(i-1)/2]);
    }
    return 0;
}

hdu 1029

标签:acm   hdu   

原文地址:http://blog.51cto.com/13688928/2103704

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!