(转载) 数组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,如需转载请自行联系原作者

目录
相关文章
|
3月前
|
Python
计算小于或等于n的非负整数区间包含的1的数量
计算小于或等于n的非负整数区间包含的1的数量
22 0
|
3月前
|
存储 算法 Java
数据结构和算法面试题:给定一个整数数组 nums,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。
数据结构和算法面试题:给定一个整数数组 nums,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。
42 0
|
4月前
|
存储 算法 程序员
【算法训练-数组 一】【数组子集】:最长无重复子数组
【算法训练-数组 一】【数组子集】:最长无重复子数组
22 0
|
8月前
|
C++
计算一个数组的子集
给你一个整数数组 nums ,数组中的元素 互不相同 。返回该数组所有可能的子集(幂集)。
36 0
|
9月前
定义一个包含10个整数元素的数组,初始值由用户给定。找出数组中的最大数并连同下标一起输出。
定义一个包含10个整数元素的数组,初始值由用户给定。找出数组中的最大数并连同下标一起输出。
147 0
|
机器学习/深度学习 存储 算法
【简单算法】1.两数之和,给定整数数组和目标值,找出数组中2数之和等于目标值的元素
【简单算法】1.两数之和,给定整数数组和目标值,找出数组中2数之和等于目标值的元素
【简单算法】1.两数之和,给定整数数组和目标值,找出数组中2数之和等于目标值的元素
给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。 子数组 是数组中的一个连续部分。
给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。 子数组 是数组中的一个连续部分。
477 0