Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在C语言中找到真-假情况(2^n个情况需要编写)_Python_C_Probability - Fatal编程技术网

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代码。。。