我需要在pascal中制作程序。
例如
readln(4)
和输出应该是0和1的所有排列
0000
0001
0010
0100
0111
0011
0110
0101
1010
1000
1001
1100
1011
1101
1110
1111
你能帮我吗?
答案 0 :(得分:-1)
您可能已经注意到“0和1的所有排列”都是binary numbers。
给定输入3,您将输出:
000, 001, 010, 011, 100, 101, 110 and 111
他们是数字0
,1
,2
,3
,4
,5
,6
和基数2(二进制)中的7
。
所以你在这里有两个问题。
首先,您需要能够将十进制(基数为10)的整数(例如12)转换为二进制(二进制中的12为1100)。
第二个问题是找出用整数停在哪里。如果您输入了2
,那么您将输出00, 10, 11
并停止。这是从0到3.给定3
您输出000, 001, 010, 011, 100, 101, 110, 111
- 从0到7。
这里有模式吗?是。如果输入为X,请尝试找出计算最大十进制数的方法。
基地10的权力为10,
100 10 1
基数2是2的幂,4 2 1
因此,给定输入5,我们知道将有51
s作为最后一个数字11111
。十进制数是多少?它是2 5 -1,它是31.给定输入3,我们知道它将是111
,它是7,或2 3 -1
因此,给定任何输入X,我们知道最后一个数字将是连续的X1
,并且X1
s将等于2 X -1
这很容易编程。只需创建一个函数MagicForumulaForCalculatingNumberGivenLength
,它以整数作为输入(长度)并返回十进制整数:
function MagicForumulaForCalculatingNumberGivenLength(input:integer):integer; Result := (power(2, input) -1);
所以,现在我们知道我们需要达到的十进制数 - 对于输入为5,它是31。
我假设你可以像这样循环:
readln(Input);
for I := 1 to MagicFormulaForCalculatingNumberGivenLength(Input);
writeln(MagicFormulaForCalculatingBinaryGivenNumber(I));
所以现在唯一的问题是如何创建二进制数。 It's pretty easy - 我会给你伪代码中的代码,这样你就可以自己写成pascal:
define DecimalNumberToBinaryString(Input:integer):string;
SBinary: string;
SBinaryRev: string;
while Input > 0 do
SBinary = SBinary + mod(Input,2)
Input = div(Input,2)
SBinaryRev = TextReverse(SBinary);
return SBinary