• 微信公众号:美女很有趣。 工作之余,放松一下,关注即送10G+美女照片!

每日一题—-空瓶子喝可乐问题

互联网 diligentman 6天前 9次浏览

问题描述

有一家店的老板,今天心情特别好,特地为大家带来一项优惠活动:三个空的可乐瓶子可以换一瓶可乐来喝。小明是一位非常爱喝可乐的同学,他已经攒了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("%dn",sum);
    return 0;
}


程序员灯塔
转载请注明原文链接:每日一题—-空瓶子喝可乐问题
喜欢 (0)