zoukankan      html  css  js  c++  java
  • 汽水瓶

    题目

    有这样一道智力题:“某商店规定:三个空汽水瓶可以换一瓶汽水。小张手上有十个空汽水瓶,她最多可以换多少瓶汽水喝?”答案是5瓶,方法如下:先用9个空瓶子换3瓶汽水,喝掉3瓶满的,喝完以后4个空瓶子,用3个再换一瓶,喝掉这瓶满的,这时候剩2个空瓶子。然后你让老板先借给你一瓶汽水,喝掉这瓶满的,喝完以后用3个空瓶子换一瓶满的还给老板。如果小张手上有n个空汽水瓶,最多可以换多少瓶汽水喝?
    链接:https://www.nowcoder.com/questionTerminal/fe298c55694f4ed39e256170ff2c205f
    来源:牛客网

    正常思路,递归

    /*
    递归问题:最主要是先分析出其递归方程,此外,可以考虑是否可以使用迭代替换。
    
    3个瓶子换1瓶水+1个空瓶子,两个瓶子换1瓶水+0个空瓶子,1个瓶子换0瓶水。
    f(1) = 0
    f(2) = 1
    f(3) = 1
    f(4) = f(2)+1    //4个瓶子,其中3个可以换1瓶水+1个空瓶,所以是f(2)+1
    f(5) = f(3)+1    //3个瓶子换1瓶水+1个空瓶,所以是f(3)+1
    ...
    f(n) = f(n-2)+1
    */
    #include <iostream>
    using namespace std;
    
    int f(int n)
    {
        if(n==1) return 0;
        if(n==2) return 1;
        return f(n-2)+1;
    }
      
    int main()
    {
        int n;
        while(cin >> n){
            if(n==0)
                break;
            cout<<f(n)<<endl;
        }
        return 0;
    }
    

    巧解

    #include <iostream>
    using namespace std;
    int main()
    {
    	int n;
    	while(cin>>n)
    	{
            if(n == 0) break;
    		//每3瓶换一瓶,剩余一瓶
    		//实际上每两瓶就能换一瓶且没有剩余
    		//极限想法,尽可能地借即得最大量
    		//数学证明:
    		cout<<n/2<<endl;
    	}
    	return 0;
    }
    
    感谢阅读,如有问题,请批评指正,谢谢。
  • 相关阅读:
    回发保留前台添加的html
    关于NBear数据访问层IDData
    使用js把数字转化成会计格式
    二次注入
    .htaccess利用与Bypass方式总结
    HTTPoxy漏洞(CVE-2016-5385)
    JAVA并行程序基础一
    队列-数组实现
    Vuex
    稀疏数组
  • 原文地址:https://www.cnblogs.com/clwsec/p/11443550.html
Copyright © 2011-2022 走看看