| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1091 人关注过本帖
标题:花了3天时间还是解不出来~求高手指教
只看楼主 加入收藏
ccapp
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2009-10-23
结帖率:33.33%
收藏
已结贴  问题点数:20 回复次数:21 
花了3天时间还是解不出来~求高手指教
要求是:
Abit和Bbit是2种2进制数,Abit的值根据输入的变量a,从无限循环的1010101010...中取前a个数作为Abit的 值。比如当a=3,Abit=101;a=4,Abit=1010;a= 7, Abit= 1010101。   Bbit 的值根据输入的变量b,所 有b位数的2进制数都是Bbit的制。  程序的要求是根据输入的a和b,显示出所有含有Abit的Bbit的值,按照由小到大的顺序。不能在程序中使用 string,array 和 recursion。b 的取值从1到31,所以Bbit最大可以有31位数;a的取值小于等于b
下面是一个程序运行情况的sample:
please enter b:
5
please enter a:
3
the results are:
00101
01010
01011
01101
10100
10101
10110
10111
11010
11011
11101
搜索更多相关主题的帖子: 时间 指教 
2009-10-23 10:14
jiangwu10057
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:1
帖 子:341
专家分:667
注 册:2009-3-25
收藏
得分:0 
我认为难点是
对于无限循环怎么在程序中怎么表示···
其他应该没难点
具体怎么做我也不知道··无限循环不会表示·
2009-10-23 10:32
ccapp
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2009-10-23
收藏
得分:0 
我找Abit的方法是把a分成2种情况:当a是奇数或者偶数用不同的公式来得到Abit,如下:
if( a % 2 == 0 )
    {
        for( Abit = 0, N = 1; N < a; N += 2)
        {
            Abit += pow( 10, N );
        }
    }
   
 else
    {
        for( Abit = 0, N = 0; N < a; N += 2 )
        {
            Abit += pow( 10, N );
        }
    }   
由于整数型再长都不能达到31位,我就创建4个int的变量,来分割储存超过10位数的Abit,感觉起来这样的做法好像有点不太有效率  又想不出其他办法。  不过关于打印出所有包含Abit的Bbit的值,还是没有一点头绪
2009-10-23 10:51
m456m654
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:3
帖 子:783
专家分:2806
注 册:2009-9-17
收藏
得分:0 

刚看到,也不能用数组~
2009-10-23 11:07
ccapp
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2009-10-23
收藏
得分:0 
是啊 要求好多   看的头晕   好用的方法都不能用~~ 没人解的出来么~
2009-10-23 11:13
StarWing83
Rank: 8Rank: 8
来 自:仙女座大星云
等 级:贵宾
威 望:19
帖 子:3951
专家分:748
注 册:2007-11-16
收藏
得分:0 
C语言输出二进制数太麻烦了,写了个Python的……

程序代码:
av = 0xAAAAAAAA

def solve(a, b):
    "get 00a000, n = 3, b = 6, c = 0"

    n = 0
    while n < b - a + 1:
        old_n = n
        c = 0
        cc = b - n - a
        binvalue = lambda x: int(bin(x)[2:])
        while n > 0:
            for d in xrange(0, 2**n):
                if cc == 0:
                    print "%d%0*d" % (
                            binvalue(av >> (32 - a)), n, binvalue(d))
                else:
                    print "%0*d%d%0*d" % (cc, binvalue(c),
                            binvalue(av >> (32 - a)), n, binvalue(d))
            n -= 1
            c = (c << 1) | 1
            cc += 1
        print "%0*d%d" % (cc, binvalue(c), binvalue(av >> (32 - a)))
        n = old_n + 1

solve(3, 5)



专心编程………
飞燕算法初级群:3996098
我的Blog
2009-10-23 12:02
ccapp
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2009-10-23
收藏
得分:0 
多谢楼上  可惜我要的就是用c来编写的
2009-10-23 12:06
StarWing83
Rank: 8Rank: 8
来 自:仙女座大星云
等 级:贵宾
威 望:19
帖 子:3951
专家分:748
注 册:2007-11-16
收藏
得分:0 
………………算法都出来了,C的还不简单么……
程序代码:
#include <stdio.h>
#include <stdlib.h>

#define A 0xAAAAAAAA

int bv(int n)
{
    int res = 0, b = 1;
    while (n)
    {
        res += b * (n & 1);
        b *= 10;
        n /= 2;
    }
    return res;
}

int main(void)
{
    int a, b;

    while (scanf("%d%d", &a, &b) == 2)
    {
        int n = 0, bn = 1, orig_n, orig_bn;
        while (n < b - a + 1)
        {
            int c = 0, cc = b - n - a;

            orig_n = n;
            orig_bn = bn;

            while (n > 0)
            {
                int d;
                for (d = 0; d < bn; ++d)
                {
                    if (cc != 0)
                        printf("%0*d", cc, bv(c));
                    printf("%d%0*d\n", bv(A >> (32 - a)), n, bv(d));
                }
                n -= 1;
                bn >>= 1;
                c = (c << 1) | 1;
                cc += 1;
            }
            if (cc != 0)
                printf("%0*d", cc, bv(c));
            printf("%d\n", bv(A >> (32 - a)));
            n = orig_n + 1;
            bn = orig_bn << 1;
        }
    }
    return 0;
}



专心编程………
飞燕算法初级群:3996098
我的Blog
2009-10-23 12:19
ccapp
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2009-10-23
收藏
得分:0 
呵呵   多谢了   不过ls的这个代码只适合 a,b 都是int,a 和 b <= 10 的时候     而这个程序的要求是a和b都可以达到31位数    这样来说long long 都不够用
2009-10-23 12:36
mofeel
Rank: 2
等 级:论坛游民
帖 子:20
专家分:26
注 册:2009-10-22
收藏
得分:0 
//获得ABit的值
#include <stdio.h>
 
void getAbit(int n);
 
int main()
{
    int n;
    printf("input the len of Abit");
    scanf("%d",n);
 
    getAbit(n);
    return 0;
}
 
void getAbit(int n)   //获得Abit
{
    int i;
    for(i=0;i<n;i++)
    {
        if(i%2==0)
        {
            printf("1");
        }
        else
        {
            printf("0");
        }
 
    }
}
关于无限循环,您多虑了!
2009-10-23 12:42
快速回复:花了3天时间还是解不出来~求高手指教
数据加载中...
 
   



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

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