题目内容
喝汽水问题
喝汽水,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; }