zoukankan      html  css  js  c++  java
  • 李白打酒|2014年蓝桥杯B组题解析第三题-fishers

    李白打酒

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

    思路一:递归,dfs搜索全部方案(全排列),在出口处筛选条件(5个店、10次花、酒数位0、最后一次遇到的是花...)

    思路二:递归,dfs搜索前14个位置,放入5个店的方案,筛选条件(正好把酒喝完)

    思路三:二进制枚举

    思路一代码

    #include<iostream>
    using namespace std;
    
    int ans = 0;
    
    void dfs(char a[],int k,int shop,int flower,int num){
    	//出口 
    	if(num<0){
    		return;
    	}
    	
    	//最后递归出口 当k==16时 并且恰好手中的酒的斗数 == 0 
    	if(k == 16 && num == 0){
    		if(a[15] == 'b' && num == 0){
    			ans++;
    		}
    		return;
    	}
    	
    	//如果还能遇到商店 
    	if(shop>0){
    		a[k] = 'a';
    		dfs(a,k+1,shop-1,flower,num*2);
    		a[k] = '0';
    	}
    	//如果还能遇到花 
    	if(flower>0){
    		a[k] = 'b';
    		dfs(a,k+1,shop,flower-1,num-1);
    		a[k] = '0';
    	}
    }
    
    int main(){
    	char a[20];
    	for(int i=1;i<20;i++){
    		a[i] = 0;
    	}
    	int shop = 5;
    	int flower = 10;
    	dfs(a,1,shop,flower,2);
    	cout<<ans<<endl;
    }
    

    思路三代码

    #include<bits/stdc++.h>
    using namespace std;
    
    int main(){
    	int sum;
    	int shop = 0;
    	int flower = 0;
    	int ans = 0;
    	for(int i=0;i<(1<<14);i++){//2^14-1种方案 
    		sum = 2;
    		shop = 0;
    		flower = 0;
    		for(int j=0;j<14;j++){//枚举当前方案每一位,当前位是1表示是花 0表示是酒店 
    			if(i&(1<<j)){
    				flower++;
    				sum--;
    			}else{
    				shop++;
    				sum*=2;
    			}
    		}
    		//最后一次遇到的是花 且sum==1 
    		if(flower==9 && shop==5 && sum==1){
    			ans++;
    		}
    	}
    	cout<<ans<<endl;
    	return 0;
    }
    //14 
    
  • 相关阅读:
    spring boot 配置时区差别
    Java 中序列化与反序列化引发的思考?
    Http 状态码总结
    Springboot
    ConcurrentHashMap 实现缓存类
    C#基础(二)拆箱与装箱,循环与选择结构,枚举
    C#基础知识(一)自己总结的。。。
    贪吃蛇大作战双人版加强版完整代码加详细步骤,不懂问博主 啦啦啦。
    C#数组随机生成四个随机数
    C#添加背景音乐
  • 原文地址:https://www.cnblogs.com/fisherss/p/10286166.html
Copyright © 2011-2022 走看看