本文主要是介绍蓝桥杯历年真题 Java b组 2015年 第六届 饮料换购,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
一、题目
饮料换购
乐羊羊饮料厂正在举办一次促销优惠活动。乐羊羊C型饮料,凭3个瓶盖可以再换一瓶C型饮料,并且可以一直循环下去,但不允许赊账。
请你计算一下,如果小明不浪费瓶盖,尽量地参加活动,那么,对于他初始买入的n瓶饮料,最后他一共能得到多少瓶饮料。
输入:一个整数n,表示开始购买的饮料数量(0<n<10000)
输出:一个整数,表示实际得到的饮料数
例如:
用户输入:
100
程序应该输出:
149
用户输入:
101
程序应该输出:
151、
资源约定:
峰值内存消耗(含虚拟机) < 256M
CPU消耗 < 1000ms
请严格按要求输出,不要画蛇添足地打印类似:“请您输入...” 的多余内容。
所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。
注意:不要使用package语句。不要使用jdk1.7及以上版本的特性。
注意:主类的名字必须是:Main,否则按无效代码处理。
二、代码+反思
法一:就是简单的按思路解体办法
package Lan2015;//导包
import java.util.Scanner;
public class eight饮料换购 {/*饮料换购乐羊羊饮料厂正在举办一次促销优惠活动。乐羊羊C型饮料,凭3个瓶盖可以再换一瓶C型饮料,并且可以一直循环下去,但不允许赊账。请你计算一下,如果小明不浪费瓶盖,尽量地参加活动,那么,对于他初始买入的n瓶饮料,最后他一共能得到多少瓶饮料。输入:一个整数n,表示开始购买的饮料数量(0<n<10000)输出:一个整数,表示实际得到的饮料数例如:用户输入:100程序应该输出:149用户输入:101程序应该输出:151资源约定:峰值内存消耗(含虚拟机) < 256MCPU消耗 < 1000ms请严格按要求输出,不要画蛇添足地打印类似:“请您输入...” 的多余内容。所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。注意:不要使用package语句。不要使用jdk1.7及以上版本的特性。注意:主类的名字必须是:Main,否则按无效代码处理。*//** 1.键盘录入一个整数,用来表示初始买的n瓶饮料*** */public static void main(String[] args) {//1,键盘录入一个整数,这时候我们要先导包Scanner sc = new Scanner(System.in);//定义一个整数n来接收键盘录入的整数int n = sc.nextInt();//定义一个数用来存最后的饮料数int sum = 0;//就是当大于或等于三个瓶子的时候我们再在进入循环体while (n >= 3) {n -= 2;//当满于三个瓶子的时候,我们剪去2个瓶子,剩一个瓶子,相当于那3个瓶子换一个瓶子//给我们的瓶子的总数里面加三个瓶子sum += 3;}//当最后不满三个瓶子的时候,我们也不能再换瓶子了,我们只需要将剩下的瓶子加入到最后的整数里面即可sum += n;//输出最后的瓶子数System.out.println(sum);}
}
法一的反思:
注意:
1.记得要定义一个数用来存放最终的饮料数sum
2.循环采用while循环,只知道循环结束的条件,瓶子数量不满于三个的时候
3.将三换一,转化成减2,但每次减之前都往最后的总数里面还加了三个(表示3换1)
法二:采用递归的思想
package Lan2015;//导包
import java.util.Scanner;
public class eight饮料换购 {/*饮料换购乐羊羊饮料厂正在举办一次促销优惠活动。乐羊羊C型饮料,凭3个瓶盖可以再换一瓶C型饮料,并且可以一直循环下去,但不允许赊账。请你计算一下,如果小明不浪费瓶盖,尽量地参加活动,那么,对于他初始买入的n瓶饮料,最后他一共能得到多少瓶饮料。输入:一个整数n,表示开始购买的饮料数量(0<n<10000)输出:一个整数,表示实际得到的饮料数例如:用户输入:100程序应该输出:149用户输入:101程序应该输出:151资源约定:峰值内存消耗(含虚拟机) < 256MCPU消耗 < 1000ms请严格按要求输出,不要画蛇添足地打印类似:“请您输入...” 的多余内容。所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。注意:不要使用package语句。不要使用jdk1.7及以上版本的特性。注意:主类的名字必须是:Main,否则按无效代码处理。*/public static void main(String[] args) {Scanner sc = new Scanner(System.in);int n = sc.nextInt();System.out.println(n + f(n));//原始的数量+换购的数量,f(n)表示换购的数量}//写递归函数,传入一个参数// 如果瓶子数小于3,直接返回一个0//满足大于等于3,我们返回的是已换购的瓶子数 + 看(新换购的瓶子数和剩余的瓶子数)又能换购的数量static int f(int n) {if(n < 3) {return 0;}return (n / 3 + f(n % 3 + n / 3));}}
代码二反思:
大致思路就是:先把所拥有的瓶子看能换多少个瓶子,然后将剩余的瓶子加上新换的瓶子的个数再看能换多少个瓶子,这不就是又回到所拥有的瓶子看能换多少个瓶子,
注意:我们的输出语句那里传入的参数是原先有的瓶子数加上新换的瓶子数。
这篇关于蓝桥杯历年真题 Java b组 2015年 第六届 饮料换购的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!