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