首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

一家著名外包公司的笔试题。解决办法

2012-02-24 
一家著名外包公司的笔试题。设int a[n],a中存有n个整数,又设一整数m,求a[n]的子集,使得每一子集各项的和等

一家著名外包公司的笔试题。
设int a[n],a中存有n个整数,又设一整数m,求a[n]的子集,使得每一子集各项的和等于m。(例如:int a[3]={1,2,3,4,},m=5,则子集为:{2,3},{1,4})。请给出解题思路,并考虑效率问题。

[解决办法]

C/C++ code
#include <stdio.h>#include <stdlib.h>#define N 4int mask[N];void subsum (int *set, const int size, int c, int m) {         int sum = 0;    int i = 0;    if(c == size)     {         for(i = 0; i < size; i++)             if(mask[i] == 1)                sum = sum + set[i];         if(sum == m)        {               printf(" { ");               for(i = 0; i < size; i++)                     if(mask[i] == 1)                       printf("%d ",set[i]);               printf("}\n");        }        }    else     {         mask[c] = 1;         subsum(set, size, c + 1, m);         mask[c] = 0;          subsum(set, size, c + 1, m);     } } int main () {     int set[N] = {3,2,5,6};     subsum(set,N,0,11);    system("PAUSE");    return 0; } 

热点排行
Bad Request.