关于任一数组的组合问题
2009-03-24 20:25
288 查看
任意给一数组,如{-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);
}
再任意给一个值,如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);
}
相关文章推荐
- 关于算法—— 一维字符串数组之间组合问题的C#实现
- 关于字符串组合等地址问题
- 关于数组的问题
- 关于复杂数据存储的问题--基础篇:数组以及浅拷贝与深拷贝的问题(下)
- 关于柔性数组的一些问题
- 关于数组与字符串输入的问题-C++版 推荐
- 关于python3中整数数组转bytes的效率问题
- 关于结构体中的数组问题
- 关于结构体里面的字符串指针输出出现乱码的问题与结构体数组作为参数传值的问题
- 用C语言如何编程实现从三个数组中各抽取几个数进行组合的问题?
- 关于数组和list的nullPointerException问题
- 发现关于数组求其长度 strlen 和 sizeof的问题
- 关于pl/sql中数组初始化的问题
- golang关于json库的一个比较容易陷入的坑 uint8[]数组的json转换问题.
- 关于数组的逆置问题
- 关于函数返回的局部数组的问题
- java数组排列组合问题汇总
- 关于memcpy拷贝结构体、结构体数组到字符数组(字符串)的问题
- 关于数组以及c#学习问题
- 关于数组的一些问题