给一个整数数组,输出所有可能的子集
2017-07-25 10:17
169 查看
1:迭代法
思路很简单,就是用一个二进制的数表示当前元素集合的状态,状态的第i位如果是0,说明当前集合没有这个元素;如果是1,就是有这个元素,然后输出。//动态规划?
int a[4] = { 1, 2, 3, 4 }; int t = 1<<4; for (int i = 1; i <= t - 1; i++) { cout<<"{"; for (int j = 0; j <= 4; j++) { if ((1 << j)&i) cout << a[j] << " "; } cout << "}" << endl; }
2:递归法
思路也很简单,就是把集合状态用pos数组存下来,pos[i]如果是0,说明当前集合没有这个元素;如果是1,就是有这个元素,然后输出.//深搜?
void dfs(int a[], int pos[], int now,int len)
{
if (now == len)
{
cout << "{";
for (int i = 0; i < now; i++)
{
if (pos[i] == 1)
cout << a[i] << " ";
}
cout << "}" << endl;
return ;
}
pos[now] = 0;
dfs(a, pos, now+1,len);
pos[now] = 1;
dfs(a, pos, now+1,len);
}
int main()
{
int a[4] = {1, 2, 3, 4};
int pos[4] = {0, 0, 0, 0};
int now = 0;
int len = 4;
dfs(a, pos, now,len);
return 0;
}
相关文章推荐
- 输入一个整数,输出所有可能的整数序列,使得序列中的整数之和等于输入的整数
- 定义一个int型的一维数组,包含10个元素,分别赋一些随机整数,然后求出所有元素的最大值,最小值,平均值,和值,并输出出来。
- 定义一个int型的一维数组,包含10个元素,分别赋一些随机整数,然后求出所有元素的最大值,最小值,平均值,和值,并输出出来。
- 给定整数数组,输出所有和为给定整数值的子集
- 网易笔试题:输入一个正整数,若该数能用几个连续正整数之和表示,则输出所有可能的正整数序列。
- 编一个程序,输入10个整数,并放在数组中,先降序输出所有的数,再统计并输出其中正数、负数和零的个数
- 网易笔试题:输入一个正整数,若该数能用几个连续正整数之和表示,则输出所有可能的正整数序列。
- 输入一个正整数,若该数能用几个连续正整数之和表示,则输出所有可能的正整数序列。
- N个数组,从每个数组中取出一个数,组成一个序列,输出所有可能的情况
- java—数组乘积输入: 一个长度为n的整数数组input 输出: 一个长度为n的数组result,满足result[i] = input数组中,除了input[i] 之外的所有数的乘积,不用考虑溢出例如 input {2, 3, 4, 5} output: {60, 40, 30, 24}
- 给一个整数数组,对数组中的每个整数中的所有数字按照升序排列(如101排序后为011)请写一个方法,输出排序后的数组中的最大数。 例如有一个数组: 101、132、375,排序后11、123、357,
- 输出一个字符串数组所有非空子集
- 给定一个数组,n个数,打印所有可能的r位数的组合。例如{1,2,3,4}n=4,r=2.输出{1,2}{1,3}{1,4}{2,3}{2,4}{3,4}
- 问题:利用输入输出流重载实现一个整数数组的输入和输出。 要求:输入一个数组大小 及 所有元素的值,排序后输出该数组的所有元素。
- 编程题:输入一个正整数,若该数能用几个连续正整数之和表示,则输出所有可能的正整数序列
- 对整数数组里所有的数字拼接起来,输出最小的一个
- 有一个整数数组,然后有一个数m,要找到整数数组中,所有和等于m的组合,并输出。
- 输入一个正整数,若该数能用几个连续正整数之和表示,则输出所有可能的正整数序列
- Java编程:定义一个int型的一维数组,包含10个元素,分别赋一些随机整数,然后求出所有元素的最大值,最小值,平均值,和值,并输出出来。
- 给定一个可能包含重复的整数的集合,S返回所有可能的子集。