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

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;
}

以上是关于每日一题----空瓶子喝可乐问题的主要内容,如果未能解决你的问题,请参考以下文章

湖南省第6届程序设计大赛第一题 汽水瓶

C语言进阶之旅(每日一题)换汽水

喝汽水问题

《LeetCode之每日一题》:238.换酒问题

喝1000瓶水问题

非常可乐