#include<stdio.h>
char a[15];
int count=0;
int fun(int store,int flower,int wine,int i)
{
if(store>5 || flower>10)
return 0;
else if(store==5 && flower==10 && i==15)
{
if(wine==0 && a[14]=='b')
{
count++;
}
}
a[i]='a';
fun(store+1,flower,wine*2,i+1);
a[i]='b';
fun(store,flower+1,wine-1,i+1);
return count;
}
void main()
{
printf("%d\n",fun(0,0,2,0));
}
題目描述:
話說大詩人李白,一生好飲。幸好他從不開車。 無事街上走,提壺去打酒。
逢店加一倍,遇花喝一斗。
這一路上,他一共遇到店5次,遇到花10次,已知最後一次遇到的是花,他正好把酒喝光了。
請你計算李白遇到店和花的次序,可以把遇店記為a,遇花記為b。則:babaabbabbabbbb 就是合理的次序。像這樣的答案一共有多少呢?請你計算出所有可能方案的個數(包含題目給出的)。
為什麼最後輸出結果會是0?當被調函數中的if語句不成立時不想要它返回該如何?
不需要具體方案的程序見下面代碼。
如需要打印具體方案,參見我的博客(可能還在待審狀態,csdn發個博客真費勁):
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
int fun(int store,int flower,int wine)
{
if(store>5 || flower>10)
return 0;
else if(store==5 && flower==9 && wine==1)
{
return 1;
}
int re=0;
re+=fun(store+1,flower,wine*2);
re+=fun(store,flower+1,wine-1);
return re;
}
void main()
{
printf("一共%d個方案\n\n",fun(0,0,2));
}