首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

找出序列中满足条件的所有组合解决办法

2012-06-01 
找出序列中满足条件的所有组合有一数组,元素无序排列,给定一个数,如何从该数组找到两个数的和等于这个数的

找出序列中满足条件的所有组合
有一数组,元素无序排列,给定一个数,如何从该数组找到两个数的和等于这个数的组合。 比如说 数组 a [1,2,3,4,5],现在要找的和等于6的所有组合,(1,5)(2,4)。 请问是该用二叉树吗? 谢谢。

[解决办法]
来个笨方法,抛砖引玉:

C/C++ code
vector<int> vec;int curSum = 0;void fun(int k[], int begin, int end, int sum){    if(begin>end) return;    vec.push_back(k[begin]);    curSum += k[begin];    if(curSum == sum){        for(unsigned int i=0; i<vec.size(); ++i) cout<<vec[i]<<" ";        cout<<endl;    }    fun(k,begin+1,end,sum);    vec.pop_back();    curSum -= k[begin];    fun(k,begin+1,end,sum);}int main(){    int k[] = {1,2,3,4,5};    fun(k,0,5,6);    return 0;}
[解决办法]
用C写一个
#include "stdlib.h"
#include "stdio.h"
int find(char array[10],int temp,int flag);
int main(){
char array[10]={1,2,3,4,5,6,7,8,9,10};
int i=0,len=10,sum=0,flag=0,temp=0;;
printf("请输入一个数:\n");
scanf("%d",&sum);
while(i<len){
temp=sum-array[i];
flag=find(array,temp,flag);
if(flag==1){
printf("%d+%d=%d\n",array[i],temp,sum);
}
flag=0;
i++;
}
return 0;
}
int find(char array[10],int temp,int flag){
int i=0;
while(array[i]){
if(array[i]==temp)
flag=1;
i++;
}
return flag;
}

[解决办法]
比如A B C D E,其中2*C = F,则以C为分割点,两边对称取组合,满足要求了
[解决办法]
1.从小到大排序成大小为n的数组Array
2.定义下标i=0, j=n-1
3.若Num=Array[i]+Array[j],则输出,且i++,j--;
若Num>Array[i]+Array[j],则i++;
若Num<Array[i]+Array[j],则j--
4.若i<j,则转至第3步;否则结束

热点排行