这会儿满足要求了吧?处理了a==1的特殊情况,并且没有用到字符串,数组和递归(要求真TMD多……)
程序代码:
程序代码:#include <stdio.h>
#include <stdlib.h>
#define A 0xAAAAAAAA
void bval(int n, size_t wide)
{
int i, res = 0;
for (i = wide; i--; n >>= 1)
res = (res << 1) | (n & 1);
for (i = wide; i--; res >>= 1)
putchar('0' + (res & 1));
}
int main(void)
{
int a, b;
while (scanf("%d%d", &a, &b) == 2
&& a > 0 && a <= b && b >= 1 && b <= 31)
{
int n = 0, orig_n, bn = 1, orig_bn;
if (a == 1)
{
bn = 1;
for (n = 1; n < b; ++n)
bn = (bn << 1) | 1;
for (n = 0; n <= bn; ++n)
{
bval(n, b);
putchar('\n');
}
continue;
}
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)
{
bval(c, cc);
bval(A >> (32 - a), a);
bval(d, n);
putchar('\n');
}
n -= 1;
bn >>= 1;
c = (c << 1) | 1;
cc += 1;
}
bval(c, cc);
bval(A >> (32 - a), a);
putchar('\n');
n = orig_n + 1;
bn = orig_bn << 1;
}
}
return 0;
}








