• 汽水瓶问题


    某商店规定:三个空汽水瓶可以换一瓶汽水

    小张手上有十个空汽水瓶,她最多可以换多少瓶汽水喝?”答案是5瓶。

    方法如下:先用9个空瓶子换3瓶汽水,喝掉3瓶满的,喝完以后4个空瓶子,用3个再换一瓶,喝掉这瓶满的,这时候剩2个空瓶子。

    然后你让老板先借给你一瓶汽水,喝掉这瓶满的,喝完以后用3个空瓶子换一瓶满的还给老板。

    如果小张手上有n个空汽水瓶最多可以换多少瓶汽水喝?

    目前想到了两种方法:

    一、利用递归

      f(1) = 0
      f(2) = 1
      f(3) = 1
      f(4) = f(2)+1
      f(5) = 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 m;
        while(cin>>m){
            if(m!=0)
                cout<<m/2<<endl;
        }
        return 0;
    }

     C++11

  • 相关阅读:
    迭代器设计模式
    python中的turtle库绘制图形
    Tesseract-OCR4.0识别中文与训练字库实例
    java图片处理
    Tess4J OCR简单使用教程
    C++ 排列最优解算法思想
    Swing使用JavaFXweb组件
    java专业术语
    java的分数类
    System Rules 更好的测试
  • 原文地址:https://www.cnblogs.com/chongjz/p/12558923.html
Copyright © 2020-2023  润新知