假设有n个布尔变量x1, ..., xn,输出其所有可能的真值集合
来源:互联网 发布:mock.js官网 编辑:程序博客网 时间:2024/05/22 02:01
例如,如果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个元素的序列。
- #include <stdio.h>
- #define Max_size 100 /*最多可以使得n=100 */
- void value(char *, int i, int n);
- void main(void)
- {
- int n, k;
- char list[Max_size]; /*用字符数组存储字符,‘T’代表true, ‘F’代表false*/
- printf("input the number of Booleans: \n");
- scanf("%d", &n);
- if (n<1 || n>Max_size)
- {
- printf("\nImproper number n!\n");
- exit(1);
- }
- for(k=0; k<n; k++)
- {
- list[k] = 'T';
- }
- value(list, 0, n-1);
- }
- void value (char *list, int i, int n)
- {
- int j;
- if (i==n+1) /*已经递归完毕, 输出序列*/
- {
- for (j=0; j<=n; j++)
- {
- printf("%c", list[j]);
- }
- printf(" ");
- }
- else {
- list[i] = 'T';
- value(list, i+1, n);
- list[i] = 'F';
- value(list, i+1, n);
- }
- }
0 0
- 假设有n个布尔变量x1, ..., xn,输出其所有可能的真值集合
- 假设有n个布尔变量x1, ..., xn,输出其所有可能的真值集合
- n个布尔变量,打印所有可能的真值组合
- 数据结构学习笔记(一),输出n个布尔变量所有真值组合
- 输出N个布尔变量的组合
- 数据结构--栈-编写一个算法输出n个布尔量的所有可能的组合
- 数据结构c语言描述(美)习题1-3 n个布尔变量的真值组合
- 设S是有n个元素的集合,S的幂集是S所有可能的子集组成的集合。
- 有N个正实数(注意是实数,大小升序排列) x1 , x2 ... xN,另有一个实数M。 需要选出若干个x,使这几个x的和与 M 最接近。
- 给定n个实数x1,x2,...,xn,求这n个实数在实轴上相邻2个数之间的最大差值M,要求设计线性的时间算法
- 有一个集合A,它又n个元素,请用回溯法输出它所有的子集。
- 假设一个集合有N篇文章
- 递归-N个不相同的元素,输出所有可能的排列
- 输入N个数,输出所有可能的排列组合(6+个小时啊,耶稣~)
- 给定一个字符串,输出其所有的可能排列
- N个数组,从每个数组中取出一个数,组成一个序列,输出所有可能的情况
- 假设栈的输入序列为1、2、3、...、n,求出所有可能的出栈序列
- 输出集合{1,2,...,n}的所有子集
- Memcached实现机制
- C#学习之逆波兰公式简单实现
- ptr_vector
- 实用技巧——获取验证码的倒计时
- 深度学习领域相关资料
- 假设有n个布尔变量x1, ..., xn,输出其所有可能的真值集合
- Android 更新UI的两种方法——handler和runOnUiThread()
- Swagger实践和总结
- 基于DFS的拓扑排序
- 不容错过,最全的安卓架构合集-(从零开始搭建android框架系列(2))
- APP 屏蔽 触发事件
- 多视角看云平台中的服务可用性
- 图解JSP与Servlet的关系
- CocoaPods 安装 使用