李白喝酒C++两种方法实现
int s,rh,fl,sum=1;
for (int i = 0; i < pow(2, a+b); i++)
{
s = c; rh = 0; fl = 0;
for (int j = i, m = 1; m <= a+b; j = j >> 1, m++)
{
if (j % 2 == 0) { s *= 2; rh++; }
/*标题:李白打酒
话说大诗人李白,一生好饮。幸好他从不开车。
一天,他提着酒壶,从家里出来,酒壶中有酒2斗。他边走边唱:
无事街上走,提壶去打酒。
逢店加一倍,遇花喝一斗。
这一路上,他一共遇到店5次,遇到花10次,已知最后一次遇到的是花,他正好把酒喝光了。
请你计算李白遇到店和花的次序,可以把遇店记为a,遇花记为b。则:babaabbabbabbbb就是合理的次序。像这样的答案一共有多少呢?请你计算出所有可能方案的个数(包含题目给出的)。
}
if (a == 0 && b == 1 && c == 1) //这个是满足要求的终止条件。没有店剩下,还剩一朵花和一斗酒
{
sum = sum + 1;
cout << prin1 << "\t" << sum << endl;
}
return sum;
}
int main2(int a,int b,int c){
else { s -= 1; fl++; }
if ((m<a+b && s <= 0) || rh>a || fl>b || (m == a+b && (j % 2)==0)) break;
if (m == a+b&&s==0)
{
for (int j = i, m = 1; m++ <= a+b; j = j >> 1){
int sum = 0, prin;
char prin1[15];
void main(){
sum = 0;
main1(5, 10,2);
cout << endl;
main2(5, 10,2);
}
int main1(int a, int b, int c){// a:店的总数b:花的总数c:酒的初值
//任何初始状况,都有两个可能:先遇到店,或者先遇到花
if (a>0){
prin++;
prin1[prin - 1] = 'a';
main1(a - 1, b, c * 2); //逢店加一倍
prin--;
}
if (b>0){
prin++;
prin1[prin - 1] = 'b';
main1(a, b - 1, c - 1); //遇花喝一斗
prin--;
if (j % 2 == 0) cout << "a";
else cout << "b";
}
//cout << "\t" << i << "\t" << sum++ << endl;
cout<< "\t" << sum++ << endl;
}
}
}
return 0;
}
注意:通过浏览器提交答案。答案是个整数。不要书写任何多余的内容。
*/
#include<iostream>
#inclmespace std;
#include<math.h>
int main1(int a, int b, int c);
int main2(int a,int b,int c);