标签:结果 数组 main 复杂度 turn params 完成 tle 二维
题解:
#include<stdio.h>
int n,ret=0,a[10000][10];
int p(int c,int s){
int i;
for(i=1;i<=3;i++){
s+=i;
if(c==9){
if(s==n){
a[ret][c]=i;
ret++;
return 1;
}else{
s-=i;
continue;
}
}else{
if(p(c+1,s)){
a[ret-1][c]=i;
return 1;
}
}
}
}
int main()
{
int i,j;
scanf("%d",&n);
if(n>30&&n<10){
printf("0");
}else{
int b=p(0,0);
}
printf("%d\n",ret);
for(i=0;i<ret;i++){
for(j=0;j<10;j++){
printf("%d ",a[i][j]);
}
printf("\n");
}
return 0;
}
可惜的是这个递归出来只有一个解,之后将返回值去掉,进入函数时存放数据,满足一次就拷贝数据至下一行数组中,继续循环。这样弄有点繁琐。
简单点的话,其实可以用一个一维数组来测试组合,符合时就将这组数拷贝到二维数组中。
m1[10000][10],m2[10];
void p(int total,int a){
if (a==10){
if (total==n) {
for (int j=0;j<10;j++) m1[kind][j]=m2[j];
(综合)P2089 烤鸡
标签:结果 数组 main 复杂度 turn params 完成 tle 二维
原文地址:https://www.cnblogs.com/lijiahui-123/p/12243524.html