69,371
社区成员
发帖
与我相关
我的任务
分享
int fum(int i, int store, int flower, int wine)
{
if(store > 5 || flower > 9)
{
return sum;
}
else if(wine == 1 && store == 5 && flower == 9)
{
printf("%s\n", str);
return ++ sum;
}
str[i] = 'a';
fum(i + 1, store + 1, flower, wine * 2);
str[i] = 'b';
fum(i + 1, store, flower + 1, wine - 1);
return sum;
}
int main(int argc, char *argv[]) {
str[14] = 'b';
printf("%d\n", fum(0, 0, 0, 2));
return 0;
}
1、楼主的返回条件稍微有点问题,这个if((store>5)(flower>10))return;中间不加||可以运行么?
2、其实楼主不需要判断i是多少,因为按照正常情况store和flower减完,i刚好是这个值,如果某一个数不减完a也不会越界,如果减完了就直接返回了。
3、a[14]='b'是必然条件,因此无需进行判断。#include<stdio.h>
int sum=0;
int f(int a,int b,int c){ // a:店的总数 b:花的总数减1 c:酒的初值
// 任何初始状况,都有两个可能:先遇到店,或者先遇到花
if(a>0)
f(a-1,b,c*2); // 逢店加一倍
if(b>0)
f(a,b-1,c-1); // 遇花喝一斗
if(a==0&&b==0&&c==1) //这个是满足要求的终止条件。没有店剩下,还剩一朵花和一斗酒
sum=sum+1;
return sum;
}
int main()
{
int numstore,numflower,jiu;
printf("输入遇到店的次数:");
scanf("%d",&numstore);
printf("输入遇到花的次数:");
scanf("%d",&numflower);
printf("输入酒的初值:");
scanf("%d",&jiu);
f(numstore,numflower-1,jiu);
printf("%d\n",sum);
return 0;
}