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

  • 相关阅读:
    Android 代码判断是否获取ROOT权限
    Tomcat环境变量
    Ubuntu Android环境搭建
    java 取出文本文件中的空行
    Step by Step for configuration of sending customize IDOC/自定义IDOC发送配置
    Oracle SQL语句执行完整过程:
    Continue Posting, Keep Fighting
    Moto G 通话没声音
    Android 手机技巧
    Digg Reader 登录不了,原来如此
  • 原文地址:https://www.cnblogs.com/heyonggang/p/3170935.html
Copyright © 2011-2022 走看看