zoukankan      html  css  js  c++  java
  • (转载) 数组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("=   10.
    ");  
    30   }  
    31   }  
    32   printf("
    Total:   %d.
    ",   count);  
    33    
    34   return   0;  
    35   } 

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

  • 相关阅读:
    闭包
    iframe
    函数声明和函数表达式
    简单的事件委托
    onhashchange
    WebP探索
    Chrome
    适合自己学习的一些网站
    模拟jQuery的一些功能
    __autoload()方法
  • 原文地址:https://www.cnblogs.com/heyonggang/p/3170935.html
Copyright © 2011-2022 走看看