回复 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;
}

~