编程介的小学生
2018-11-04 09:36
采纳率: 92.5%
浏览 460
已采纳

数据结构方面的一个问题算法怎么实现?

李白打酒
 话说大诗人李白,一生好饮。幸好他从不开车。
    一天,他提着酒壶,从家里出来,酒壶中有酒2斗。他边走边唱:
    无事街上走,提壶去打酒。
    逢店加一倍,遇花喝一斗。
    这一路上,他一共遇到店5次,遇到花10次,已知最后一次遇到的是花,他正好把酒喝光了。 
    请你计算李白遇到店和花的次序,可以把遇店记为a,遇花记为b。则:babaabbabbabbbb 就是合理的次序。像这样的答案一共有多少呢?请你计算出所有可能方案的个数(包含题目给出的)。

  • 写回答
  • 好问题 提建议
  • 关注问题
  • 收藏
  • 邀请回答

2条回答 默认 最新

  • threenewbee 2018-11-23 14:45
    已采纳
    已采纳该答案
    评论
    解决 无用
    打赏 举报
  • Italink 2018-11-04 11:40
     #include<iostream>
    #include<string>
    #include<set>
    using namespace std;
    set<string> result;
    string road="               ";
    string key = "ab";
    int a = 0, b = 0;
    int judge(string a) {
        int w = 2;
        for (int i = 0; i < a.length(); i++) {
            if (a[i] == 'a')
                w *= 2;
            else
                w--;
            if (w < 0)
                return 0;
        }
        if (w == 0)
            return 1;
        return 0;
    }
    void search(char ch,int a,int b, int k) {
        if (a < 5) {
                road [k]= 'a';
                search(key[0], a + 1, b, k + 1);
        }
        if (b < 10) {
                road[k]= 'b';
                search(key[1], a, b + 1, k + 1);
        }
        if (judge(road))
            result.insert(road);
    }
    int main() {
        search('a',0,0,0);
        for (auto it = result.begin(); it != result.end(); it++)
            cout << *it << endl;
        return 0;
    }
    
    评论
    解决 无用
    打赏 举报