博文视点官方博客http://blog.csdn.net/bvbook

技术凝聚实力 专业创新出版 与向上的心合作 共同成长!

用户操作
[即时聊天] [发私信] [加为好友]
博文视点ID:bvbook
296651次访问,排名184好友187人,关注者201
博文视点读者信箱:reader@broadview.com.cn
博文视点投稿信箱:BVtougao@gmail.com
bvbook的文章
原创 254 篇
翻译 1 篇
转载 37 篇
评论 409 篇
博文视点的公告
参加读者调查,免费获取新书
博文视点,重磅推荐
博文视点,PDF最新书目
最近评论
KKK:好书,听朋友介绍过。
interhanchi:O’REILLY的一些底层和c/c++的书怎么不出呀。。。
bvbook:P135: 第六行
f(23)应为f(123);

这个在第二刷上显示的页码是131页
非常感谢您的指正。
yyuedong:在移位的基础上,进行改进。
思想是:每次移位大于一次。下面代码以两次为例:
-----------------------------------------------------
int oneNum[] = {0,1,1,2};
int Count(BYTE v)
{
int num = 0;
while……
杨跃东:在移位的基础上,进行改进。
思想是:每次移位大于一次。下面代码以两次为例:
-----------------------------------------------------
int oneNum[] = {0,1,1,2};
int Count(BYTE v)
{
int num = 0;
while……
文章分类
收藏
    相册
    北斗星图书
    李锟先生
    图片勘误
    网络用图
    博文团队
    博文-何艳
    博文-刘唯一
    博文-刘美慧
    博文-刘薇
    博文-周筠
    博文-徐勤栋
    博文-徐定翔
    博文-晓菲
    博文-李鑫
    博文-杨小勤
    博文-杨昕宇
    博文-杨绣国
    博文-林建峰
    博文-梁晶
    博文-梅梅
    博文-梅玮
    博文-海猫
    博文-白爱萍
    博文-胡文佳
    博文-胡金贤
    博文-解娟娟
    博文-赵士威
    博文-郑丹
    博文-陈元玉
    博文-陈琼
    博文-陈蓉
    博文-马辰宇
    博文-鲁怡娜
    友情链接
    《程序员》杂志
    《软件调试》官方站点
    Dflying Chen @ cnblogs
    InfoQ的霍泰稳
    ITECN博客主编:盆盆
    RESTful Web Services中文版-网站
    博客园博文视点官方博客
    微软 武汉.NET 俱乐部
    熊力的博客——Windbg专家(RSS)
    移山之道(RSS)
    存档
    订阅我的博客
    XML聚合  FeedSky
    订阅到鲜果
    订阅到Google
    订阅到抓虾
    订阅到BlogLines
    订阅到Yahoo
    订阅到GouGou
    订阅到飞鸽
    订阅到Rojo
    订阅到newsgator
    订阅到netvibes

    转载 《编程之美》读书笔记:发帖水王收藏

    新一篇: Web改变世界,我们以REST的方式创造Web | 旧一篇: 《Python源码剖析》十七号全面上市

    《编程之美》收集了约60道算法和程序设计的题目,作者试图从书中各种有趣的问题出发,引导读者发现问题,分析问题,解决问题,寻找更优的解法。本书的更深层的意义在于引导读者思考,和读者共享思考之乐,编程之美。

    感谢azuryy为大家分享他对《编程之美》的思考,以下是他对第2.3节“发帖水王”扩展问题提出的解题方法,原博客地址为: http://hi.baidu.com/azuryy/blog/item/65ecc2d5583c7ac151da4b15.html

    Type candidate1 ;
    Type candidate2;
    Type candidate3;

    void Find(Type* ID, int N)
    {
        int nTimes1 = 0 ;
        int nTimes2 = 0 ;
        int nTimes3 = 0 ;
        int i;

        for( i = 0; i < N; i++)
        {
            if (nTimes1 == 0)
            {
                candidate1 = ID[i],nTimes1 = 1;
            }
            else
            {
                if (candidate1 == ID[i])
                {
                    nTimes1++;
                }
                else
                    if (nTimes2 == 0)
                    {
                        candidate2 = ID[i],nTimes2 = 1;
                    }
                    else
                    {
                        if (candidate2 == ID[i])
                        {
                            nTimes2++;
                        }
                        else
                        {
                            if (nTimes3 == 0)
                            {
                                candidate3 = ID[i], nTimes3 = 1;
                            }
                            else
                                if (candidate3 == ID[i])
                                {
                                    nTimes3++;
                                }
                                else
                                {
                                    nTimes1--;
                                    nTimes2--;
                                    nTimes3--;
                                }
                        }
                    }
            }
        }
    }

    int main()
    {
        int a[] = {0,4,1,4,0,4,1,4,1,0,3,3,0,3,3,3};
        Find(a,16);
        cout << candidate1 <<" " << candidate2 << " " << candidate3 << endl;
        return 0;
    }

    发表于 @ 2008年07月16日 13:13:00|评论(loading...)|收藏

    新一篇: Web改变世界,我们以REST的方式创造Web | 旧一篇: 《Python源码剖析》十七号全面上市

    评论

    #jeff_sun 发表于2008-09-20 10:56:15  IP: 218.94.136.*
    上面的解法似乎有问题:
    int a[] = {1,2,3,2,3,4,2,1,1,5,3};
    即满足nTimes1==0 && candidate2==ID[i]时,得到的结果是错误的。可以改进一下:

    int candidate1=-1; //不存在的ID号
    int candidate2=-1;
    int candidate3=-1;

    void Find(int * ID, int N)
    {
    int nTimes1 = 0 ;
    int nTimes2 = 0 ;
    int nTimes3 = 0 ;
    int i;

    for( i = 0; i < N; i++)
    {
    if(candidate1 == ID[i])
    nTimes1 ++;
    else if(candidate2 == ID[i])
    nTimes2 ++;
    else if(candidate3 == ID[i])
    nTimes3 ++;
    else if(nTimes1 == 0)
    {
    candidate1 = ID[i];
    nTimes1 ++;
    }
    else if(nTimes2 == 0)
    {
    candidate2 = ID[i];
    nTimes2 ++;
    }
    else if(nTimes3 == 0)
    {
    candidate3 = ID[i];
    nTimes3 ++;
    }
    else
    {
    if(--nTimes1 == 0)
    candidate1=-1;
    if(--nTimes2 == 0)
    candidate2=-1;
    if(--nTimes3 == 0)
    candidate3=-1;nTimes1 --;
    nTimes2 --;
    nTimes3 --;
    candidate1=-1;
    candidate2=-1;
    candidate3=-1;
    }
    }
    }

    发表评论  


    登录
    Csdn Blog version 3.1a
    Copyright © 博文视点