蓝桥杯 课后思考题


题目:有n个数字哪几个相加等于m

例如 13569 哪几个相加等于 10

思路:搜索算法的应用

#include
#include
#include
#define max 100
using namespace std;
int a[max],total=0;
int judge(int a[],int x,int sum,int n,int m){//数组大小 数组下标 和 数组下标最大值 目标值 
    int i,j,count=0;
    for(i=x;i){
        count=sum+a[i];
        if(count==m){
            total++;
            return 0;
        }else if(count<m){
            judge(a,i+1,count,n,m); 
        }else if(count>m){
            return 0;
        }
    }
}
int main(void)
{
    int n,m,i;
    scanf("%d %d",&n,&m);
    for(i=0;i){
        scanf("%d",&a[i]);
    }
    sort(a,a+n);//快速排序 
    judge(a,0,0,n,m);
    printf("%d",total); 
    return 0;
}

 代码:

#include
#include
#include
using namespace std;
int n,k;
void dfs(int a[],int b[],int i){
    if(i==n){
        int sum=0;
        sum=accumulate(b,b+6,0);
        if(sum==k){
            for(i=0;i)
             printf("%d ",b[i]);
            printf("\n");
        }
        return;
    }else{
        b[i]=1*a[i];
        dfs(a,b,i+1);
        b[i]=0*a[i];
        dfs(a,b,i+1);
        return;
    }
}
int main(void)
{
    int a[6]={1,2,3,5,6,9},b[6];
    n=6;
    k=10;
    dfs(a,b,0);
    return 0;
}

相关