Python 如何在C语言中找到真-假情况(2^n个情况需要编写)
我想写一个显示真与假组合的程序。这只是程序的一部分。我写了其他部分,但我找不到解决办法 例如:Python 如何在C语言中找到真-假情况(2^n个情况需要编写),python,c,probability,Python,C,Probability,我想写一个显示真与假组合的程序。这只是程序的一部分。我写了其他部分,但我找不到解决办法 例如: input: 2 output: T T T F F T F F input: 4 output: T T T T T T T F T T F T T T F F T F T T T F T F T F F T T F F F F T T T F T T F F
input: 2
output:
T T
T F
F T
F F
input: 4
output:
T T T T
T T T F
T T F T
T T F F
T F T T
T F T F
T F F T
T F F F
F T T T
F T T F
F T F T
F T F F
F F T T
F F T F
F F F T
F F F F
如果您不想编写代码,可以解释或使用伪代码或Python:)简单地将整数转换为二进制格式怎么样
def possibilities(bitcount):
for i in reversed(xrange(2**bitcount)):
yield ("{0:0" + str(bitcount) + "b}").format(i)
def prettyprint(bitcount):
for p in possibilities(bitcount):
print " ".join(p.replace("0", "F").replace("1", "T") + "/")
如果您需要以编程方式处理这些可能性,一系列位操作就足够了,您甚至不需要字符串转换。简单地将整数转换为二进制格式怎么样
def possibilities(bitcount):
for i in reversed(xrange(2**bitcount)):
yield ("{0:0" + str(bitcount) + "b}").format(i)
def prettyprint(bitcount):
for p in possibilities(bitcount):
print " ".join(p.replace("0", "F").replace("1", "T") + "/")
如果您需要以编程方式处理这些可能性,一系列位操作就足够了,您甚至不需要字符串转换。好了:
def PrintTruthTable(size):
for i in range(0,1<<size):
print ' '.join(['T' if (i>>j)&1==1 else 'F' for j in range(0,size)])
好了:
def PrintTruthTable(size):
for i in range(0,1<<size):
print ' '.join(['T' if (i>>j)&1==1 else 'F' for j in range(0,size)])
最简单的方法是使用二进制代码 我们只需为从0到最大数的所有数字编写二进制代码,我们可以使用二进制位数使其等于输入 我们输入3。 我们用3个二进制数字可以得到的最大数字是111,即7。 所以我们将为从0到7的所有数字编写二进制代码 它们是: 000=0 001=1 010=2 011=3 100=4 101=5 110=6 111=7 要写T或F,我们只需要设置一个条件,其中T为1,F为0 代码如下:
#include<stdio.h>
#include<string.h>
int num_of_digits;
void bitcode(int num){
int current_digit_num=num_of_digits;
while(current_digit_num!=0){
if(num%2==1)
printf("T ");
else
printf("F ");
num=num/2;
current_digit_num--;
}
}
main()
{
int current_num,value;
scanf("%d", &num_of_digits);
value=pow(2,num_of_digits);
for(current_num=0;current_num<value;current_num++){
bitcode(current_num);
printf("\n");
}
return 0;
}
#包括
#包括
整数数字;
无效位代码(int num){
int current_digit_num=_位的数量;
while(当前数字=0){
如果(数量%2==1)
printf(“T”);
其他的
printf(“F”);
num=num/2;
当前数字-;
}
}
main()
{
int当前_num,值;
scanf(“%d”、&num\u位);
值=功率(2,数字的数量);
对于(current_num=0;current_num来说,最简单的方法是使用二进制代码
我们只需为从0到最大数的所有数字编写二进制代码,我们可以使用二进制位数使其等于输入
我们输入3。
我们可以用3个二进制数字来做的最大数是111,即7。
所以我们将为从0到7的所有数字编写二进制代码
它们是:
000=0
001=1
010=2
011=3
100=4
101=5
110=6
111=7
要写T或F,我们只需要设置一个条件,其中T为1,F为0
代码如下:
#include<stdio.h>
#include<string.h>
int num_of_digits;
void bitcode(int num){
int current_digit_num=num_of_digits;
while(current_digit_num!=0){
if(num%2==1)
printf("T ");
else
printf("F ");
num=num/2;
current_digit_num--;
}
}
main()
{
int current_num,value;
scanf("%d", &num_of_digits);
value=pow(2,num_of_digits);
for(current_num=0;current_num<value;current_num++){
bitcode(current_num);
printf("\n");
}
return 0;
}
#包括
#包括
整数数字;
无效位代码(int num){
int current_digit_num=_位的数量;
while(当前数字=0){
如果(数量%2==1)
printf(“T”);
其他的
printf(“F”);
num=num/2;
当前数字-;
}
}
main()
{
int当前_num,值;
scanf(“%d”、&num\u位);
值=功率(2,数字的数量);
例如(current_num=0;current_numSecond示例是错误的:n等于4,而每个块中的T[F]字母数是5。你是对的,我编辑了,所以你想学习如何使用真/假数组显示二进制文件?到目前为止你有什么伪代码?我写了作业的其他部分。其他部分用这个数组进行计算。(-((((T&T)|)((T |-T))例如,我每天都在思考这一部分。我在脑海中找不到任何算法。你想在每一行或列表后用“/”打印输出吗?第二个例子是错误的:n等于4,而t[F]的数字每个块中的字母是5。你是对的,我编辑过,所以你想学习如何用真/假数组显示二进制?到目前为止你有什么伪代码?我写了家庭作业的其他部分。其他部分用这个数组进行计算。(-((T&T)|((T |-T))例如,我每天都在想这个部分。我在脑子里找不到任何算法。你想在每一行或一个列表后用“/”打印输出吗?这将在最后不打印任何内容,因为你没有返回任何内容。@Danastar,我知道生成器是什么,你的prettyprint不是生成器。你为什么需要一个函数来打印问题是,如果你将代码输入到一个分级器,它会被标记为不正确,因为会有一个额外的“无”打印输出。抱歉+1,两小时睡眠和打印函数的副作用,而不是调用它!这将在最后不打印任何内容,因为您不返回任何内容。@Danastar,我知道生成器是什么,您的预打印不是生成器。为什么您需要一个函数来打印它?问题是,如果您将代码输入到分级器,它将被标记为不正确,因为会打印出一个额外的“无”。抱歉+1,两小时睡眠和打印功能的副作用,而不是调用它!您能解释一下范围(0,大小)内j的这一部分吗为什么它在结尾。@user3223986:请参阅更新的答案,其中包含一个可能更容易理解的Python代码…您能否在范围(0,大小)内为j解释一下这部分为什么它在结尾。@user3223986:请参阅更新的答案,其中包含一个可能更容易理解的Python代码。。。