关于任一数组的组合问题

任意给一数组,如{-10,45,35,99,10,6,9,20,17,18} 
再任意给一个值,如35. 
请从上面的数组中找出所有的组合,使他们的和等于35. 
例如对于上面的数组,所有的组合情况为: 
35; 
-10+45; 
17+18; 
6+9+20; 
-10+35+10; 
-10+17+18+10; 
-10+6+9+20+10; 
注意,每一种组合中一个数只能出现一次。

 

 

 

 

当然我发表这篇文章之前看到很多人都有回复:我也写了个算法,可以处理这个问题,当然这是一个可以处理类似问题的(我写的是c语言的):

 

 

#include<stdio.h>

#include<malloc.h>

int num_n(int n);

int main()

{

int length,i,j,sum=0,num=0,m,give,k,h,n,r=0;

printf("输入数组长度/n");

scanf("%d",&length);

printf("输入要对比的数/n");

scanf("%d",&give);

int *array=(int*)malloc(length*sizeof(int));

for(i=0;i<length;i++)

{

   printf("输入数组元素array[%d]=",i);

scanf("%d",array+i);

}

for(i=0;i<length;i++)

{

   printf("现在数组中array[%d]=%d/n",i,array[i]);

}

int *p,*q;

q=p=(int*)malloc(length*sizeof(int));

for(i=0;i<length;i++)

{

*(p+i)=0;

}

for(i=0;i<length;i++)

{

   printf("现在元素表示p[%d]=%d/n",i,p[i]);

}

    num=num_n(length);

for(i=1;i<=num;i++)

{

m=i;

for(j=1;j<=length;j++)

{

k=m%2;

if(k==1)

{

    sum+=array[j-1];

}

m=m/2;

}

if(sum==give)

{

   int a=i;

 

for(j=1;j<=length;j++)

{

k=a%2;

printf("%d/t",k);

a=a/2;

}

            printf("/n");

}

sum=0;

}

 

}

int num_n(int n)

{

if(n==1) return 2;

else return 2*num_n(n-1);

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值