回复 9楼 青蝶
楼主的叙述没问题,主要是大家的理解的立场不一样,有所差别。楼主给定的数组是10个元素,要求的是这10个元素的和为给定的值。而不是一部分元素之和的值。
#include<iostream> #include<cstdio> #include<algorithm> using namespace std; int a[11]= {0},Totol=0; void print() { Totol++; printf("%d",a[0]); for(int i=1; i<10; i++)printf(" %d",a[i]); printf("\n"); } void dfs(int x,int remain) { if(x==9) {//迭代到第九个数就可以判断出结果了。 if(remain>0&&remain<4) { a[9]=remain; print(); } return; } if(remain<=0)return;//还没到第九个数,和已大于等于n,剩下的也不用测试了 for(int j=1; j<4; j++) { a[x]=j; dfs(x+1,remain-j); } } int main(void) { int n,i,j; scanf("%d",&n); if(n<10 || n>30) { printf("0\n"); exit(0); } dfs(0,n); printf("共计%d组\n",Totol); return 0; }