P2089 烤鸡解法
每一位都是选1或2或3,选一位就减少一位,总数减少相应数量,然后进行下一次迭代,当选完10个数,总数刚好减少到0,就算是一个解,记录下来即可,如果总数不为0,就直接返回。
#include<iostream>
using namespace std;
int a[11], ans[10000][11], counter;
void sel(int n, int l){
if(l == 10){
if(n == 0){
counter++;
for(int i=0; i<10; i++)
ans[counter][i] = a[i];
return;
}
else return;
}
for(int i=1; i<=3; i++){
a[l] = i;
sel(n - i, l + 1);
}
}
int main(){
int n;
cin>>n;
sel(n, 0);
cout<<counter<<endl;
for(int i=1; i<=counter; i++){
for(int j=0; j<10; j++){
if(j) cout<<" ";
cout<<ans[i][j];
}
cout<<endl;
}
return 0;
}