如何在C中找到TRUE - FALSE情况(2 ^ n情况需要写)

时间:2014-05-12 10:25:46

标签: python c probability

我想编写一个显示True和False组合的程序。这只是计划的一部分。我写了其他部分,但我找不到解决方案。

例如:

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:)

3 个答案:

答案 0 :(得分:3)

如何将整数简单转换为二进制格式?

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") + "/")

如果您需要以编程方式处理这些可能性,那么一堆位操作就足够了,您甚至不需要进行字符串转换。

答案 1 :(得分:2)

你去了:

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)])
  • i索引遍历0到2 ^ size-1
  • 之间的每个可能组合
  • j索引遍历由i
  • 值给出的组合中的每一位

您可能更容易理解:

def PrintTruthTable(size):
    for i in range(0,1<<size):
        line = ''
        for j in range(0,size):
            if (i>>j)&1 == 1:
                line += 'T'
            else:
                line += 'F'
        print line

答案 2 :(得分:0)

最简单的方法是使用二进制代码。

我们只需为从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;
}

注意:此方法有效,因为从0(000 ..)到最大数字(111 ..),我们将完成所有可能的组合,以填充0或1的大量数字。