【題目】
話說大詩人李白,一生好飲。幸好他從不開車。
一天,他提著酒壺,從家裡出來,酒壺中有酒2鬥。他邊走邊唱:
無事街上走,提壺去打酒。
逢店加一倍,遇花喝一斗。
這一路上,他一共遇到店5次,遇到花10次,已知最後一次遇到的是花,他正好把酒喝光了。
請你計算李白遇到店和花的次序,可以把遇店記為a,遇花記為b。則:babaabbabbabbbb 就是合理的次序。像這樣的答案一共有多少呢?請你計算出所有可能方案的個數(包含題目給出的)。
注意:通過瀏覽器提交答案。答案是個整數。不要書寫任何多餘的內容。
【分析】
這是乙個典型的需要用遞迴模擬的題目,我們需要做的是分析出在這一過程當中變化的地方抽為引數,然後分析出所有的遞迴出口。
【原始碼】
public class test011
// jiu表示還剩多少斗酒,店表示還剩多少次店,hua表示還剩多少次花
private static void libai(int step, int jiu, int dian, int hua)
if (step == 0 && jiu == 1 && dian == 0 && hua == 1)
libai(step - 1, jiu - 1, dian, hua - 1); // 遇到花了
libai(step - 1, jiu * 2, dian - 1, hua); // 遇到店了
}}
【結果】
14種情況
【列印所有可能性原始碼】
private static hashsetsets;
public static void main(string args)
} // c陣列代表經過的資料,jiu表示剩下的酒,step表示已經走了多少步,dian表示遇到了店的次數,hua表示遇到了花的次數,isdian位true表示下次遇到店
private static void hj(char c, int jiu, int step, int dian, int hua,
boolean isdian)
if (dian > 5)
if (hua > 10)
//*********遞迴出口*********
if (isdian) else
//遞迴出口
if (step == 14)
return;
} //下一次遇到的是店
hj(c, jiu * 2, step + 1, dian + 1, hua, true);
//下一次遇到的是花
hj(c, jiu - 1, step + 1, dian, hua + 1, false);
}
【結果】
14abbbaabbabbbabb
ababbbbbabababb
baabbabbbaabbbb
abbbaabbbaabbbb
baababbbbbababb
abbbabaabbabbbb
abbabbabbbababb
babaabbabbabbbb
bababaababbbbbb
babaababbbbbabb
abbabbbaabbbabb
baabbbaabbabbbb
abbabbbabaabbbb
baabbabbabbbabb
藍橋杯 李白打酒
話說大詩人李白,一生好飲。幸好他從不開車。一天,他提著酒壺,從家裡出來,酒壺中有酒2鬥。他邊走邊唱 無事街上走,提壺去打酒。逢店加一倍,遇花喝一斗。這一路上,他一共遇到店5次,遇到花10次,已知最後一次遇到的是花,他正好把酒喝光了。請你計算李白遇到店和花的次序,可以把遇店記為a,遇花記為b。則 ba...
藍橋杯 李白打酒
話說大詩人李白,一生好飲。幸好他從不開車。一天,他提著酒壺,從家裡出來,酒壺中有酒2鬥。他邊走邊唱 無事街上走,提壺去打酒。逢店加一倍,遇花喝一斗。這一路上,他一共遇到店5次,遇到花10次,已知最後一次遇到的是花,他正好把酒喝光了。請你計算李白遇到店和花的次序,可以把遇店記為a,遇花記為b。則 ba...
藍橋杯 李白打酒
話說大詩人李白,一生好飲。幸好他從不開車。一天,他提著酒壺,從家裡出來,酒壺中有酒2鬥。他邊走邊唱 無事街上走,提壺去打酒。逢店加一倍,遇花喝一斗。這一路上,他一共遇到店5次,遇到花10次,已知最後一次遇到的是花,他正好把酒喝光了。請你計算李白遇到店和花的次序,可以把遇店記為a,遇花記為b。則 ba...