• 汽水瓶问题


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

    小张手上有十个空汽水瓶,她最多可以换多少瓶汽水喝?”答案是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

  • 相关阅读:
    【FZYZOJ】细菌 题解(最短路)
    oracle 开发 第02章 查询
    oracle 开发 第01章 简介
    rhel配置163、epel、rpmforge的yum源
    linux 手动清除缓存
    查看linux内核版本和发行版本
    linux下安装rlwrap
    linux下安装vncserver
    Nagios 安装
    linux mutt发送报表
  • 原文地址:https://www.cnblogs.com/chongjz/p/12558923.html
Copyright © 2020-2023  润新知