| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 619 人关注过本帖
标题:做功课的一些疑问
只看楼主 加入收藏
wbw626
Rank: 1
等 级:新手上路
帖 子:37
专家分:0
注 册:2013-6-16
结帖率:87.5%
收藏
已结贴  问题点数:5 回复次数:5 
做功课的一些疑问
我是初学者,目前学到loop那一块。
题目要求一个整数的 二进制表达式里1的数量。
比如55=2^5*1+2^4*1+2^3*0+2^2*1+2^1*1+2^0*1
二进制表达式就是110111
那么函数所得的结果应该是5.
我的思路是这样
55为奇数
55/2=27奇数
27/2=13奇数
13/2=6偶数
6/2=3奇数
3/2=1奇数。
我的思路是:  1的数量和按以上方法得到的奇数的数量相等。
但while和for只帮那些符合条件的情况运作。比如每等于一次奇数那计数器+1. 以55为例子,到13的时候计数器为3,但到6的时候loop就停止了,少了一个。
我就是想知道有没有方法能让得到奇数的时候计数器+1,得到偶数时计数器不变。
写了一天了,都是错的,求大家帮帮忙

还有点没说,不让用循环,指明要用loop.
循环的code是这样:
int binr(int i){
return
    (i==1)? 1:
    (i%2==1)? 1+binr(i/2):
    binr(i/2);
}

[ 本帖最后由 wbw626 于 2013-6-16 14:45 编辑 ]
搜索更多相关主题的帖子: 计数器 二进制 表达式 
2013-06-16 14:09
雪狼MJ
Rank: 8Rank: 8
来 自:甘肃
等 级:蝙蝠侠
威 望:4
帖 子:267
专家分:853
注 册:2012-5-27
收藏
得分:0 
程序代码:
#include <stdio.h>

int main(void)
{
    int a=55; //代表需要的数字
    int c=0;//存储相应的结果
   
    loop:
    if(a%2==1)//如果是奇数,计数加一
    {
        c++;
    }
    a/=2;
   
    if(a>=1)//循环结束的条件
    {
        goto loop;
    }
   
    printf("%d\n", c);//输出结果
   
    return 0;
}

Edsger Dijkstra:算法+数据结构=程序
2013-06-16 14:43
wbw626
Rank: 1
等 级:新手上路
帖 子:37
专家分:0
注 册:2013-6-16
收藏
得分:0 
回复 2楼 雪狼MJ
题目要求是用只能用for或者while写出,而且goto这个太高端了,没学过啊。
另一个要求:i=55,那么 需要fuct1(i)=5.
能帮忙用基础点的东西吗?
谢谢啦!!!
2013-06-16 14:51
雪狼MJ
Rank: 8Rank: 8
来 自:甘肃
等 级:蝙蝠侠
威 望:4
帖 子:267
专家分:853
注 册:2012-5-27
收藏
得分:0 
妹子的,不是说学到loop了吗?!!!!

我理解你的要求是只用loop,不用while、for、do-while等循环呢,害我想了半天,我一直不喜欢用loop的!

那就更简单了
程序代码:
#include <stdio.h>

int main(void)
{
    int a=55; //代表需要的数字
    int c=0;//存储相应的结果
   
    loop:
    if(a%2==1)//如果是奇数,计数加一
    {
        c++;
    }
    a/=2;
   
    if(a>=1)//循环结束的条件
    {
        goto loop;
    }
   
    printf("%d\n", c);//输出结果
   
    return 0;
}

 

Edsger Dijkstra:算法+数据结构=程序
2013-06-16 14:55
雪狼MJ
Rank: 8Rank: 8
来 自:甘肃
等 级:蝙蝠侠
威 望:4
帖 子:267
专家分:853
注 册:2012-5-27
收藏
得分:5 
妹子的,不是说学到loop了吗?!!!!

我理解你的要求是只用loop,不用while、for、do-while等循环呢,害我想了半天,我一直不喜欢用loop的!

那就更简单了:
程序代码:
#include <stdio.h>

int main(void)
{
    int a=55; //代表需要的数字
    int c=0;//存储相应的结果
   
    while(a>0)
    {
        if(a%2==1)//如果是奇数,计数加一
        {
            c++;
        }
        a/=2;
    }
   
    printf("%d\n", c);//输出结果
   
    return 0;
}
刚刚代码贴错了。。。。。。。。。


Edsger Dijkstra:算法+数据结构=程序
2013-06-16 14:59
wbw626
Rank: 1
等 级:新手上路
帖 子:37
专家分:0
注 册:2013-6-16
收藏
得分:0 
回复 5楼 雪狼MJ
谢谢你了,总算能解决了。
我去研究你给的代码了。
2013-06-16 15:04
快速回复:做功课的一些疑问
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016473 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved