(转载) 数组a[]={3,5,2,4,1,8},要求从a中找出所有“和”等于10的子集

简介:

背包问题。   
  不过就这道题目本身而言,由于集合a中只要6个元素,而不是成千上万,所以可以使用更直观的办法:   
  只要你能通过程序给出数组a中元素所组成的集合的所有的子集合(幂集),那么只需在这些集合中搜索等于10的就可以了。   
  而6个元素构成的集合的幂集可以通过6位二进制数来表示,对于从0到2的6次方减1(63)之间的所有的数,让其每一位比特位代表一个元素,当该位为0时 表示该数所表示的子集中没有这个元素,否则表示拥有这个元素,这样就能对应出所有的组合,然后在这些所有的组合中检测和是否为10就可以了。

复制代码
 1 #include   <stdio.h>  
 2    
 3   #define   ARRAY_SIZE 6  
 4   #define   MAX_NUM (1<<ARRAY_SIZE)  
 5   int   main()  
 6   {  
 7   int   i,   j;  
 8   int   sum;  
 9   int   a[ARRAY_SIZE]   =   {3,5,2,4,1,8};  
10   int   count   =   0;  
11    
12   for(i   =   0;   i   <   MAX_NUM;   i++)  
13   {  
14   sum   =   0;  
15   for(j   =   0;   j   <   ARRAY_SIZE;   j++)  
16   {  
17   if(i   &   (1   <<   j))  
18   sum   +=   a[j];  
19   }  
20    
21   if(10   ==   sum)  
22   {  
23   printf("%d:   ",   ++count);  
24   for(j   =   0;   j   <   ARRAY_SIZE;   j++)  
25   {  
26   if(i   &   (1   <<   j))  
27   printf("%d   +   ",   a[j]);  
28   }  
29   printf("\b\b=   10.\n");  
30   }  
31   }  
32   printf("\nTotal:   %d.\n",   count);  
33    
34   return   0;  
35   } 
复制代码

来源:http://xiaozunyan.blog.sohu.com/3534370.html




本文转自夏雪冬日博客园博客,原文链接:http://www.cnblogs.com/heyonggang/p/3170935.html,如需转载请自行联系原作者

目录
相关文章
|
8月前
给定一个长度为n的数组,请将数组中元素按照奇偶性重新划分,所有奇数靠左边,所有偶数靠右边,然后分别对奇数、偶数部分进行排序
给定一个长度为n的数组,请将数组中元素按照奇偶性重新划分,所有奇数靠左边,所有偶数靠右边,然后分别对奇数、偶数部分进行排序
79 1
|
8月前
|
机器学习/深度学习 算法 数据处理
盘点四种计算数组中元素值为1的个数的方法
盘点四种计算数组中元素值为1的个数的方法
142 0
|
8月前
|
算法 测试技术 C#
【线段树 区间位运算模板】3117划分数组得到最小的值之和
【线段树 区间位运算模板】3117划分数组得到最小的值之和
|
8月前
|
存储 算法 程序员
【算法训练-数组 一】【数组子集】:最长无重复子数组
【算法训练-数组 一】【数组子集】:最长无重复子数组
56 0
|
机器学习/深度学习 存储 算法
【简单算法】1.两数之和,给定整数数组和目标值,找出数组中2数之和等于目标值的元素
【简单算法】1.两数之和,给定整数数组和目标值,找出数组中2数之和等于目标值的元素
【简单算法】1.两数之和,给定整数数组和目标值,找出数组中2数之和等于目标值的元素
(转载) 数组a[]={3,5,2,4,1,8},要求从a中找出所有“和”等于10的子集
背包问题。     不过就这道题目本身而言,由于集合a中只要6个元素,而不是成千上万,所以可以使用更直观的办法:     只要你能通过程序给出数组a中元素所组成的集合的所有的子集合(幂集),那么只需在这些集合中搜索等于10的就可以了。
660 0
|
开发工具
数组的子集能否累加出K
数组的子集能否累加出K
数组的子集能否累加出K

热门文章

最新文章