• 汽水瓶


    题目

    有这样一道智力题:“某商店规定:三个空汽水瓶可以换一瓶汽水。小张手上有十个空汽水瓶,她最多可以换多少瓶汽水喝?”答案是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;
    }
    
    感谢阅读,如有问题,请批评指正,谢谢。
  • 相关阅读:
    Java关键字transient和volatile小结(转)
    1、环境
    SSH框架搭建
    2.4 easyui
    PHP操作大文件
    PHP小工具
    PHP正则替换函数收集
    PHP小知识收集
    Yii ACF(accessController)简单控权
    linux 文件存放目录
  • 原文地址:https://www.cnblogs.com/clwsec/p/11443550.html
Copyright © 2020-2023  润新知