[讨论] 7.4【每周讨论】请统计随机数中1的个数

leang521   2011-7-4 08:57 楼主

经典笔试问题

 

“请用C实现统计任意长度的任意数中1的个数。”

 

不要觉得这个题目简单,这是微软笔试经典问题,据说现在还在用。

要用不同的方法实现,你看看你能想出多少种方法。

 

 

 

注意:禁止用混乱编程的方式

 

[ 本帖最后由 leang521 于 2011-7-4 09:06 编辑 ]

回复评论 (15)

想到最简单的:  x &0x01 若 为1加count +1  x右移一位
点赞  2011-7-4 12:32

测试平台RHEL6

#include
#include

int main(int argc, char *argv[])
{
    if (argc < 2) {
        printf("Error:No number to count\n");
        exit(-1);
    }
   
    int count = 0;
    int temp = 1;
    int num = atoi(argv[1]);

    while (0 != num) {
        if (1 == (num & temp)) {
            count += 1;
        }
        num = num >> 1;
    }
    printf("There are %d \" 1 \" in %s !\n", count, argv[1]);

    return 0;
}
QQ:1625345502
点赞  2011-7-4 13:03

回复 楼主 leang521 的帖子

老大,这个 任意个数,是不是说,是很多很多个数字,
然后是0 和 1 还是还包括23456.....

另外就是,这个包括1的个数,指的是 上面 说的那个数值是1呢,还是说它们的,比方说 二进制码 里 的 1?

不好意思,因为我实在没看明白这个题目。
强者为尊,弱者,死无葬身之地
点赞  2011-7-4 16:50

隋机数,然后要1个数

这个有点费劲
http://shop34182318.taobao.com/ https://shop436095304.taobao.com/?spm=a230r.7195193.1997079397.37.69fe60dfT705yr
点赞  2011-7-4 22:00

引用: 原帖由 辛昕 于 2011-7-4 16:50 发表 老大,这个 任意个数,是不是说,是很多很多个数字,然后是0 和 1 还是还包括23456..... 另外就是,这个包括1的个数,指的是 上面 说的那个数值是1呢,还是说它们的,比方说 二进制码 里 的 1? 不好意思,因 ...

就是一个任意数,改成二进制,然后求其中1的个数

点赞  2011-7-4 22:47

标题

反正就是移位统计快,嫌慢也可两位或三位的移,加个case判断。除二或除四或除八求余也行,一直除到等于零。其他方法等我再想想
点赞  2011-7-5 12:31
既然要用很多种办法实现,那楼主先列举两种方法啊,也好让大家更好的理解题意
点赞  2011-7-5 20:15
我提这个讨论的目的,在于巩固大家的C基本功。在高的楼,地基最重要。夯实基础,成就技术。所以我问的这个问题的目的是为了让大家抽象出基础中的基础。要知道在高级的算法也需要这些个像砖头一样的知识点来铸就。

关于我的这个问题,大家可以从C的各种特性来实现,if、while、for、还有“位图”查表算法,还还有“/(value =value/2;)”、“%(value % 2 == 1)”、“>>(value >>=1;)”、“&(value & 1 !=0)或(sum +=value & 0x01;)”、“补码(value &=(value-1);)”......

我这次的目的,就在于希望论坛能回归到基础中来,而不是好高骛远。所以,大家各言所思吧
点赞  2011-7-6 08:52
看来大家都不关心基础,都追求高科技去了
点赞  2011-7-7 11:39

回复 6楼 leang521 的帖子

哦,是这样。这个好玩。
强者为尊,弱者,死无葬身之地
点赞  2011-7-7 14:37

回复 10楼 leang521 的帖子

想一想再说。
要说简单的方法,那就是模2除2什么的,但你的题目问得这么有意思,我也得好好想才行啊。
强者为尊,弱者,死无葬身之地
点赞  2011-7-7 14:38
对了,老大忘了说
论坛的 嵌入式版块里 有个子版块 编程基础,以后有C的每日一问,不如扔哪里去,,,,
合乎主题,也可以把新版块搞起来撒。
强者为尊,弱者,死无葬身之地
点赞  2011-7-7 14:41

引用: 原帖由 辛昕 于 2011-7-7 14:41 发表 对了,老大忘了说论坛的 嵌入式版块里 有个子版块 编程基础,以后有C的每日一问,不如扔哪里去,,,,合乎主题,也可以把新版块搞起来撒。

这个还得考虑,论坛的学习氛围太差了。。。。。。

点赞  2011-7-7 15:34

回复 14楼 leang521 的帖子

如果这个论坛的气氛还叫差,那估计是没啥戏了。
你去看看CSDN啊,什么的,那才叫人失望。
强者为尊,弱者,死无葬身之地
点赞  2011-7-8 17:10
CSDN已经,,,哎,不提了
点赞  2011-7-9 17:41
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复