LQ0008 饮料换购模拟+数学
Posted 海岛Blog
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LQ0008 饮料换购模拟+数学相关的知识,希望对你有一定的参考价值。
题目来源:蓝桥杯2015初赛 C++ A组F题
题目描述
乐羊羊饮料厂正在举办一次促销优惠活动。
乐羊羊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 饮料换购模拟+数学的主要内容,如果未能解决你的问题,请参考以下文章