二进制数字的模式

Sil*_*nt 0 c binary

考虑以下形式的n位二进制数:

b n-1 b n-2 b n-3 ... b 0

每个b i是n位二进制数中的单个位.每个b i具有两个可能值之一:0或1. 6位二进制数的示例是:110011.在计算机内部,整数表示为二进制数.例如,整数43可以用6位二进制数表示:101011.在这部分中,我们将利用通过取重复序列101010的前m位构造的m位二进制模式. ...例如,对于等于3的m,二进制模式为:101.对于等于6的m,二进制模式为:101010.对于等于1的m,二进制模式为:1.

编写一个读取整数n和m作为输入的C程序,然后打印出包含m位模式的所有n位二进制数.二进制数必须按升序打印.您不允许对此问题使用字符串,数组或递归.任何使用字符串,数组或递归的程序都将获得等级0.您的程序可能会假设n将是小于或等于30的自然数,并且m将是小于或等于n的自然数.

该程序的示例输出是:

输入整数n:(5)
输入整数m:(3)
00101
01010
01011
01101
10100
10101
10110
10111
11010
11011
11101

我是编程的初学者,我已经完成了这项任务.我理解该程序将如何运作,但我不太清楚如何去实现它.任何人都可以帮助我并发布一个解决方案,以便我可以通过它,看看它是如何工作的.谢谢

eph*_*ent 10

如何编程,分两步:

  1. 自己解决问题.
  2. 让计算机做你做的.

你至少应该发布你的"我理解问题将如何发挥作用",这样你就可以被引导到"如何去做".


我现在假装我不认识C.

Ĵ

f=:4 :'#:(#~([:+./(#.y$1 0)=(2^y)|<.@-:^:(i.x))"0)i.2^x'
Run Code Online (Sandbox Code Playgroud)

哈斯克尔

f n m = filter bits [0..1^n-1] where
    p = foldl ((+).(*)2) 0 $ take m $ cycle [1,0]
    bits = elem p . map (`mod` 2^m) . takeWhile (/= 0) . iterate (`div` 2)
Run Code Online (Sandbox Code Playgroud)

  • 我喜欢这个,因为它同时说了这么多而且很少. (4认同)