题目:P2089 烤鸡 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
#include<bits/stdc++.h>
using namespace std;
int n;
int m1[10000][11],m2[11];
int cnt=0;
void pp(int total,int a){
if(a==10){ //a表配料种类,total表美味程度
if(total==n){
for(int i=0;i<10;i++) m1[cnt][i]=m2[i];
cnt++; //表方案总数
}
}
else if(total>=n) ;//跳出本次递归
else
for(int i=1;i<=3;i++){
m2[a]=i;
pp(total+i,a+1); //继续生成下一个位置的值
}
}
signed main(){
std::ios::sync_with_stdio(false);
std::cin.tie(NULL);
cin>>n;
pp(0,0);
cout<<cnt<<endl;
for(int i=0;i<cnt;i++){
for(int j=0;j<10;j++)
cout<<m1[i][j]<<" ";
cout<<endl;
}
return 0;
}
从这道题学会的:
- 递归函数稍复杂的应用和理解
- 一维数组和二维数组的组合,灵活应用