题目信息

  • 链接:汽水瓶
  • 来源:nowcoder
  • 难度:2颗星

一、描述

只有题目理解到位,你可能进入下面一个环节,如果不熟悉场景,你可要小心了

  • 我目的是训练动手和清晰思路。

  • 从简单和中等开始,如果是难题,我不是学各种技巧的。

有这样一道智力题:“某商店规定:三个空汽水瓶可以换一瓶汽水。

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

假如 :小张手上有十个空汽水瓶,她最多可以换多少瓶汽水喝?”

答案是5瓶,

方法如下:

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

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

二、举例

  • 在思路之前和实现之后都用
input output
0 0
1 0
2 1
3 1
4 2
5 2
10 5

三、思路

为了形成你思路,并且把思路转换成步骤描述。请按照下面准备

  • 关闭一切浏览器网页查看分析

  • 关闭一切当前处理任务

  • 关闭一切要学习的任务。

  • 太简单和太难这样描述不是解题步骤

    $$ 10=3*3+1— left=1+3 $$

$$ 4=3*1+1 –left =2

left=2+1(借一换一) $$

画外音:

自己根本没有认真看题目要求,题目给出解题过程,一直停留在想想中困难。

方法如下:

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

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

四、实现

你可以实现。你可以做到

  • 你按照你理解,就用最笨方法,你要写出来。其他高级技巧,我不懂,我也会。

  • 不要因为不是最佳,最巧妙,最完美。不符合别人网上流程标准解法 就停止写

    通过写,来验证你步骤描述是否正确,你分析是否正确,必须去。

  • 在没有写出来之前,拒绝一切总结,写文档,还有告诉别人。

    自己做不到,不清楚事情,你告诉别人,鬼才信呢!

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#include <iostream>

using namespace std;
int getNumber(int n)
{
    int leftEmpty =n;
    int total =0;
    while(leftEmpty  >=2)
    {   
        if(leftEmpty ==2 )
        {
            total++;
            break;
        }
        else
        {
           total +=leftEmpty/3;
           leftEmpty =(leftEmpty/3+leftEmpty%3);     
        }
       
    }
 
    return total;
}
int main()
{   
    int n;
    while(cin>>n){
        cout <<getNumber(n)<<endl;
    }
    
}


int getNumber(int n)
{   
    //循环退出的条件 n
    if (n < 2)
    {
        return 0;//不够3瓶
    }
    if (n == 2)  
    {
        return 1;//借一换一
    }
    // 每次递归都是都是一次循环。变化的是什么 每次循环变化的是n
    return n/3+getNumber(n/3+n%3);//从剩余空瓶继续计算
}

五、回顾

  • 耗时统计
步骤 分钟 备注
打开题目 30 都看什么了
分析题目 60
实现题目 60
查看答案 60
  • 解题线索

    每次递归剩余空瓶怎么计算的。

六、 举一反三

换个马甲就不认识了。

746. 使用最小花费爬楼梯

如何累加爬楼梯的

$$ 走过阶梯i的消耗能量函数 f(i)=\begin{cases} min(f(i-1),f(i-2)) & i=n \ min(cost[i-1]+f(i-1),cost[i-2]+f(i-2)) & i<n \end{cases} $$

爬到第n个楼梯是不需要消耗费用的

排到其他的楼梯是消耗cost[i]

分享最实用的经验 , 希望每一位来访的朋友都能有所收获!

请忘记我说每一句话