【多思路解决喝汽水问题】1瓶汽水1元,2个空瓶可以换一瓶汽水,给20元,可以喝多少汽水

简介: 【多思路解决喝汽水问题】1瓶汽水1元,2个空瓶可以换一瓶汽水,给20元,可以喝多少汽水

题目内容

喝汽水问题

喝汽水,1瓶汽水1元,2个空瓶可以换一瓶汽水,给20元,可以喝多少汽水(编程实现)。

题目分析

数学思路分析

根据给出的问题和引用内容,我们可以得出答案。

首先,我们用20元购买了20瓶汽水,现在有20个空瓶。

接下来,我们将这20个空瓶兑换成新的10瓶汽水

然后,将这10个空瓶再次兑换成新的5瓶汽水,此时还剩下一个空瓶。

我们将这个剩余的空瓶与后面的空瓶结合兑换,得到1瓶新的汽水

因此,到目前为止,我们总共获得了20+10+5+2+1+1=39瓶汽水。

所以,给了20元我们可以喝到39瓶汽水。

编程思路分析

思路一 循环实现

total = 20;  //汽水总数

   int k = 0;     //空瓶数

   int s = 0 ;     //剩余空瓶

第一次(k=20)。

第二次(k=20/2=10,s=20%2=0),此时total又增加10了;

第三次(k=10/2=5,s=10%2=0);

第四次(k=5/2=2, s=5%2=1,);

第五次(k=2/2=1,s=2%2=0);

(s=1)。

#include<stdio.h>
#include<stdlib.h>
int main()
{
    int total = 20;  //汽水总数
    int k = 0;     //空瓶数
    int s = 0 ;     //剩余空瓶
       k = 20;
    while(k>=1)
    {
        k= k+s;
        total = total+k/2;//原有的汽水数+换来的汽水数
        s = k%2;
        k=k/2;//两个空瓶子换1个新汽水,汽水喝完就是1个瓶子
    }
    printf("%d\n",total);
    system("pause");
    return 0;
}

思路二 递归实现

第一次和第二次买汽水 ,分别花了一块钱(+2),

从第三次开始,每次去花一块钱买汽水,再加上用第一次和第二次的空瓶子可以换来一瓶,一共可以获得两瓶汽水(+2),

第四次拿着第三次那两空瓶子,再花一块钱,又可以得到两瓶汽水(+2),

第五次,第六次,以此类推,接下来的每一次都是相当于花1元钱和两个空瓶子,来获得两瓶新的汽水

那么到最后一次时,手里已经没有钱了,即此时只有两个空瓶子换来一瓶汽水(+1)。

去买汽水的过程定义为一个函数就可以递归计算最终结果。

#include<stdio.h>
#include<stdlib.h>
int  Buy(int money)
{
    if(money==1)
        return 1;
    else 
        return Buy(money-1)+2;
}
int main()
{
    int money = 20;
    printf("%d\n",Buy(money));
    system("pause");
    return 0;
}

 

相关文章
|
6月前
如果小张手上有n个空汽水瓶,最多可以换多少瓶汽水喝(详解)
如果小张手上有n个空汽水瓶,最多可以换多少瓶汽水喝(详解)
46 1
如果小张手上有n个空汽水瓶,最多可以换多少瓶汽水喝(详解)
|
1月前
|
算法
AcWing 1343. 挤牛奶(每日一题)
AcWing 1343. 挤牛奶(每日一题)
喝汽水问题
喝汽水问题
72 0
|
6月前
leetcode-1700:无法吃午餐的学生数量
leetcode-1700:无法吃午餐的学生数量
55 0
|
5G 知识图谱
根据体重计算可以喝汽水的罐数
根据体重计算可以喝汽水的罐数
107 1
|
算法
算法:3瓶空瓶子可以换一瓶汽水
算法:3瓶空瓶子可以换一瓶汽水
180 0
刷题之小蓝吃糖果和你究竟有几个好姐妹
刷题之小蓝吃糖果和你究竟有几个好姐妹
160 0
|
Python
LeetCode 1700. 无法吃午餐的学生数量
学校的自助午餐提供圆形和方形的三明治,分别用数字 0 和 1 表示。
132 0
|
C语言
【C】喝汽水,找单身狗问题
【C】喝汽水,找单身狗问题
103 0
LeetCode | 1700. 无法吃午餐的学生数量
LeetCode | 1700. 无法吃午餐的学生数量
123 0