• 求数组中和为给定数所有的组合


    一、问题描述

    给定一个数t,以及n个整数,在这n个数中找到加和为t的所有组合,例如t=4,n=6这6个数为[4,3,2,2,1,1],这样输出就有4个不同的组合它们的加和为4:4,3+1,2+2,and 2+1+1。请设计一个高效算法实现这个需求。

    二、解题思路

    先将数据按从大到小进行排序,然后使用回溯法遍历所有可能。注意去掉重复的结果。

    三、代码实现

    #include<iostream>
    usingnamespacestd;
    inta[100]={4,3,1,2,1,2};
    boolx[100];//标记第i个元素是否已经使用
    intN=6;//元素个数
    intt=4;//目标和
    intsum;//当前和
    intcmp(constvoid*a,constvoid*b)
    {
    return*(int*)b-*(int*)a;
    }
    voidbacktrace(intn)
    {
    if(sum>t)//当前和大于t
    return;
    if(sum==t)//当前和等于t,输出结果
    {
    for(intj=0;j<n;++j)
    {
    if(x[j])
    cout<<a[j]<<" ";
    }
    cout<<endl;
    return;
    }
    if(n==N)//超过n层
    return;
    for(inti=n;i<N;++i)
    {
    if(x[i]==false)
    //未使用

    {
    x[i]=true;
    sum+=a[i];
    backtrace(i+1);
    x[i]=false;
    sum-=a[i];
    while(i<N-1&&a[i]==a[i+1])//跳过相同的
    i++;
    }
    }
    }
    intmain()
    {
    sum=0;
    memset(x,0,sizeof(x));
    qsort(a,N,sizeof(a[0]),cmp);
    backtrace(0);
    return0;
    }

    来自:http://blog.csdn.net/zhongjiekangping/article/details/5690608

    http://www.yjbys.com/bbs/358659.html

  • 相关阅读:
    PHPLIB Template入门系列 4 模板嵌套
    jQuery 实例
    建立PHP的本地调试环境
    PHP缓存memcache简单应用
    PHP程序:虚拟域名服务DIY
    去掉网络共享的session
    C# 里EF 对Mysql DB更新,乱码
    sshd的log的位置
    cURL 访问https失败
    Eclipse中编辑properties文件的编码问题
  • 原文地址:https://www.cnblogs.com/lvfeilong/p/64325sgfdgdf.html
Copyright © 2020-2023  润新知