zoukankan      html  css  js  c++  java
  • 蓝桥杯 饮料换购 数学推导

    题目描述

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

    输入

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

    输出

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

    样例输入 Copy

    100
    101

    样例输出 Copy

    149
    151




    每三瓶可以兑换一瓶,也就是每次减三后必须要加一。因此实际上是每两瓶可以使得答案加一。
    但是有一种特殊情况,即当饮料数为2的时候,此时无法兑换,需要特判。

    根据乘法的性质:
    奇数 * 奇数 = 奇数
    偶数 * 奇数 = 偶数

    也就是说,如果一开始有奇数瓶饮料x,根据每三换一的规则,若x是3的倍数,那么兑换一次后仍然是奇数瓶;若不是3的倍数,那么 x % 3 + x / 3 也是奇数。所以无需特判,答案为 x + x / 2。

    如果一开始是偶数瓶饮料x, 根据兑换规则,若x是3的倍数,那么兑换一次后仍然是偶数瓶;若不是3的倍数,那么 x % 3 + x / 3 也是偶数。这样偶数瓶饮料不停的兑换,最后一定会小于3,根据前面推出的性质,最后的数一定是偶数,因此是2。
    需要特判,答案为 x + x / 2 - 1.

     1 #include<cstdio>
     2 #include<cstdlib>
     3 #include<cstring>
     4 #include<iostream>
     5 #include<algorithm>
     6 using namespace std;
     7 
     8 int main()
     9 {
    10     int n;
    11     while(scanf("%d", &n) != EOF)
    12     {
    13         if(n == 0)
    14             printf("0
    ");
    15         else
    16         {
    17             int t = n / 2;
    18             if(n % 2 == 1)
    19                 printf("%d
    ", n + t);
    20             if(n % 2 == 0)
    21                 printf("%d
    ", n + t - 1);
    22         }
    23 
    24     }
    25     return 0;
    26 }
     
  • 相关阅读:
    error LNK2019: 无法解析的外部符号 该符号在函数 中被引用 解决方案
    【OSG】运行OSG示例出现的奶牛不完整问题
    python 遍历文件夹
    python os操作
    python io操作
    python request 代理/超时/证书
    python tuple
    python dict
    python request post
    python request get
  • 原文地址:https://www.cnblogs.com/daybreaking/p/12237758.html
Copyright © 2011-2022 走看看