给定输入的真值表生成

ven*_*ich 3 perl

我想为给定的input生成一个真值表.如果我给输入2输出将是假设的

10 01 11 00 

如果输入为3,则输出为

111 000 110 101 011 100 001 010

我有一个代码片段

#!/usr/bin/perl

#print "a|b|c\n";

for $a (1, 0){
    for $b (1, 0){
      for  $c (1,0) {
        for $d ( 1,0) 
        {        
          print "$a $b $c $d";
          #print $x = ($a & $b & $c);
          print "\n";
        }
     }
   }
}

print "\n";
Run Code Online (Sandbox Code Playgroud)

上面的代码是4.

如果不编写多个for循环,我不知道如何做到这一点.这里的值为2我需要写两个for循环,依此类推.

任何机构都可以告诉我如何为几个输入值调整此代码.

任何帮助将非常感谢

Yaa*_*lch 7

递归

这是一个使用递归的简单解决方案:

#!/usr/bin/perl -w                                                              
my $variables=$ARGV[0]||0;
show_combinations($variables);                                                           

sub show_combinations { my($n,@prefix)=@_;                                      
  if($n > 0) {                                                                  
    show_combinations( $n-1, @prefix, 0);                                       
    show_combinations( $n-1, @prefix, 1);                                       
  } else {                                                                      
    print "@prefix\n";                                                          
  }                                                                             
}
Run Code Online (Sandbox Code Playgroud)

以下是一些示例案例:

> script.pl 1
0
1
> script.pl 2
0 0
0 1
1 0
1 1
> script.pl 3
0 0 0
0 0 1
0 1 0
0 1 1
1 0 0
1 0 1
1 1 0
1 1 1
Run Code Online (Sandbox Code Playgroud)


Mar*_*ers 6

我不是Perl专家,所以你可能需要清理它,但如果被迫使用Perl,我可能会做这样的事情:

#!/usr/bin/perl

my ($n) = @ARGV;

printf("%0*b\n", $n, $_) for 0 .. (1 << $n) - 1;
Run Code Online (Sandbox Code Playgroud)


Hig*_*ark 5

我不知道Perl所以这可能不起作用:

- 从0循环到(2 ^ n)-1,其中n是你案例中的位数;

- 将每个数字转换为其n位二进制表示;

  • 你不知道Perl,但你想回答Perl问题? (2认同)

小智 5

这是使用模块Math :: Cartesian :: Product的简单的一行Perl代码.

use Math::Cartesian::Product;

cartesian {print "@_\n"} ([0..1]) x $ARGV[0];
Run Code Online (Sandbox Code Playgroud)

产量

    
./sample.pl 2

0 0
0 1
1 0
1 1

./sample.pl 3

0 0 0
0 0 1
0 1 0
0 1 1
1 0 0
1 0 1
1 1 0
1 1 1