蓝桥杯 课后思考题
题目:有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; }