LQ0008 饮料换购模拟+数学

Posted 海岛Blog

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LQ0008 饮料换购模拟+数学相关的知识,希望对你有一定的参考价值。

题目来源:蓝桥杯2015初赛

题目描述
乐羊羊饮料厂正在举办一次促销优惠活动。
乐羊羊C型饮料,凭3个瓶盖可以再换一瓶C型饮料,并且可以一直循环下去(但不允许暂借或赊账)。
请你计算一下,如果小明不浪费瓶盖,尽量地参加活动。
那么,对于他初始买入的n瓶饮料,最后他一共能喝到多少瓶饮料。

输入格式
输入存在多组测试数据
每组测试数据输入一行包含一个正整数n(1<=n<=10000)

输出格式
对于每组数据输出一行,包含一个整数,表示实际得到的饮料数

输入样例
100
101

输出样例
149
151

问题分析
这个问题可以用模拟法来实现,一种是1瓶1瓶喝进行模拟,相对计算得慢一些;另外一种是3瓶3瓶喝进行模拟。
最佳的做法是给出数学公式直接计算结果。根据题目要求得知:
n=1则喝1瓶
n=2则喝2瓶
n=3则喝4瓶
n=4,若不能借则喝5瓶,若能借则喝6瓶
按每4瓶喝6瓶来计算,可以得到数学公式,直接进行计算。

AC的C语言程序(1瓶1瓶喝模拟)如下:

/* LQ0008 饮料换购 */

#include <stdio.h>

int main()

    int n;
    while (~scanf("%d", &n)) 
        int cnt = 0, mt = 0;
        while (n--) 
            if (++mt == 3)
                n++, mt = 0;
            cnt++;
        

        printf("%d\\n", cnt);
    

    return 0;

AC的C语言程序(3瓶3瓶喝模拟)如下:

/* LQ0008 饮料换购 */

#include <stdio.h>

int main()

    int n;
    while (~scanf("%d", &n)) 
        int cnt = 0;
        while (n >= 3)
            cnt += 3, n -= 3, n++;
        cnt += n;

        printf("%d\\n", cnt);
    

    return 0;

AC的C语言程序(数学公式)如下:

/* LQ0008 饮料换购 */

#include <stdio.h>

int t[] = -1, 1, 2, 4;

int main()

    int n;
    while (~scanf("%d", &n))
        printf("%d\\n", n / 4 * 6 + t[n % 4]);

    return 0;

以上是关于LQ0008 饮料换购模拟+数学的主要内容,如果未能解决你的问题,请参考以下文章

饮料换购

饮料换购

饮料换购

饮料换购 -- 蓝桥杯

蓝桥杯-饮料换购

饮料瓶盖二维码红包是怎样实现的?