每日一题----空瓶子喝可乐问题
Posted 东条希尔薇
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了每日一题----空瓶子喝可乐问题相关的知识,希望对你有一定的参考价值。
问题描述
有一家店的老板,今天心情特别好,特地为大家带来一项优惠活动:三个空的可乐瓶子可以换一瓶可乐来喝。小明是一位非常爱喝可乐的同学,他已经攒了10个空可乐瓶,算一下他可以换多少瓶可乐呢?答案是5瓶,先用9个空瓶子换3瓶可乐,喝掉3瓶满的,喝完以后4个空瓶子,用3个再换一瓶,喝掉这瓶满的,这时候剩2个空瓶子。然后你让老板先借给你一瓶可乐,喝掉这瓶满的,喝完以后用3个空瓶子换一瓶满的还给老板。现在,编写一段代码,计算:如果你有n个空瓶子,最多可以喝掉多少瓶可乐
问题分析和数学处理
毋庸置疑,这一段代码首先得要定义一个变量,用来存储空瓶子的个数。可以定义一段整型变量。(代码中全为int类型)设刚开始有n个瓶子,在经过一次换取后,用掉了(n/3)*3个瓶子(n/3代表换取次数)。*3代表每次用掉三个瓶子。换取可乐数显然为n/3(每一次换取一个可乐)将它存储在新的变量sum中,也同时增加了n/3个空瓶子。表达式如下
n = n - n / 3 * 3 + n / 3;
但是!有一种特殊情况!
这时候剩2个空瓶子。然后你让老板先借给你一瓶可乐,喝掉这瓶满的,喝完以后用3个空瓶子换一瓶满的还给老板。
这种情况,就属于1换1,大家都不赚,也都不赔钱。
也就是说,若算到最后,n等于2了,就自动在结果上加上1。小于2就不管它了。
流程图如下
代码实现
作者使用c语言代码实现
#include<stdio.h>
int main()
{
int sum=0;
int n=0;
scanf("%d",&n);
while(n>2)
{
sum += n / 3;
n = n - n / 3 * 3 + n / 3;
if(n==2)
{
sum++;
}
}
printf("%d\\n",sum);
return 0;
}
以上是关于每日一题----空瓶子喝可乐问题的主要内容,如果未能解决你的问题,请参考以下文章