假设有n个布尔变量x1, ..., xn,输出其所有可能的真值集合

 例如,如果n=2, 有四种可能:<true, true>, <true, false>,<false, true>和<false, false>。编写C语言函数实现之。

分析:对于任意一个正整数n,所有可能的情况为2^n种,即n个2相乘。对于每一个元素,有两种可能:true或者false,我们可以将其中一种结果设定为一个长度为n的序列,在每一位上,它的值只能是true或false。可以用下面给出的简单算法来产生其所有可能的序列,即长度为n的序列由下列序列组成:(True,(n-1)序列所有结果),(False,(n-1)序列所有结果)。由此我们自然想到使用递归,这表明,如果能够解决n-1个元素的序列,就可以解决n个元素的序列。

  1. #include <stdio.h>  
  2. #define Max_size 100 /*最多可以使得n=100 */  
  3.   
  4. void value(char *, int i, int n);  
  5.   
  6. void main(void)  
  7. {  
  8. int n, k;  
  9. char list[Max_size]; /*用字符数组存储字符,‘T’代表true, ‘F’代表false*/  
  10. printf("input the number of Booleans: \n");  
  11. scanf("%d", &n);  
  12. if (n<1 || n>Max_size)  
  13. {  
  14.    printf("\nImproper number n!\n");  
  15.    exit(1);  
  16. }  
  17. for(k=0; k<n; k++)  
  18. {  
  19.    list[k] = 'T';  
  20. }  
  21. value(list, 0, n-1);  
  22. }  
  23.   
  24. void value (char *list, int i, int n)  
  25. {  
  26. int j;  
  27. if (i==n+1) /*已经递归完毕, 输出序列*/  
  28. {  
  29.    for (j=0; j<=n; j++)  
  30.    {  
  31.     printf("%c", list[j]);  
  32.    }  
  33.    printf("     ");  
  34. }  
  35. else {  
  36.    list[i] = 'T';  
  37.    value(list, i+1, n);  
  38.    list[i] = 'F';  
  39.    value(list, i+1, n);  
  40. }  

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值