2089烤鸡(类似于选数问题)

#include <iostream>
#include <cstdio>
using namespace std;
int b[100];
int c[100];
int a[3] = { 1,2,3 };
int ans;
int n;
void fun(int depth, int sum)
{
    if (depth == 10 && sum == n)//结束条件
    {
        for (int i = 0; i < 10; i++)
            cout << b[i] << " ";
        cout << endl;
        return;
    }
    if (sum > n || depth > 10)//剪枝
        return;
    for (int i = 0; i < 3; i++)//3种质量
    {
        b[depth] = a[i];
        fun(depth + 1, sum + a[i]);
    }
}
void rec(int depth, int sum)//完全模仿上一个函数,不过是为了搞出ans,并且满足输出格式(即先输出ans))
{
    if (depth == 10 && sum == n)//结束条件
    {
        ans++;
        return;
    }
    if (sum > n || depth > 10)//剪枝
        return;
    for (int i = 0; i < 3; i++)//3种质量
    {
        c[depth] = a[i];
        rec(depth + 1, sum + a[i]);
    }
}
int main()
{
   
    cin >> n;
    rec(0,0);
    cout<<ans<<endl;
    fun(0,0);
    return 0;
}
posted @ 2021-02-05 21:05  py佐料  阅读(58)  评论(0编辑  收藏  举报