论坛: 编程破解 标题: 一类问题的遍历 复制本贴地址    
作者: 286 [unique]    版主   登录
  斑竹你好,我在做一上机题的时候,遇见了一个问题,结果老师也不知道怎么做,实在是郁闷之极,又想早点解决问题,可是自己学的一般,只好硬着脸皮请求斑竹帮忙解答一下Given n Boolean variable x1,x2,...,xn,we wish to print all possible combinations of truth values they can assume .For instance, ifn=2,there are four possibilities:
<true,true> ,<false,true>,<true,false>,<false,false>.
write a c program to do this
写一个布尔变量C语言实现,我想了很久也不知道怎么做,求求你帮我可以吗?

-------------------------------------------
说明,上面是一网友给我发的短信,考虑到此类问题有普遍性,我就作为一贴给大家说说。


[此贴被 286(unique) 在 03月21日11时06分 编辑过]

地主 发表时间: 05-03-21 11:05

回复: 286 [unique]   版主   登录
这类问题有两种解法
第一种我忘了名字了,那个方法说明很麻烦,但实在起来比较简单。等我回去查查再说。

第二种方法,如果我把原理说来了,你也许就会发现其实很简单。原理就是如果把一个数转成二进制,会是什么样呢?比如转成三位。
0:000
1:001
2:010
3:011
4:100
5:101
6:110
7:111
看看右边的二进制,就发现正好是上述问题的答案。

所以程序如下:
main()
{
      让用户输入是几位,比如是n位,n位共可产生2的n次方个;
      for (int i=0;i<2^n);i++)//把所有可能都例举一遍,比如n=3位,则例举0...7,这八个数。
      {
              // 把i转化成二进制,依次判断每一位就可例举。
              for (int j=0;j<n;j++)
                if (i & 2^j == 0)
                        printf("false ");
                else
                        printf("true ");
      }
}



B1层 发表时间: 05-03-21 11:22

论坛: 编程破解

20CN网络安全小组版权所有
Copyright © 2000-2010 20CN Security Group. All Rights Reserved.
论坛程序编写:NetDemon

粤ICP备05087286号