【每日蓝桥】31、一五年省赛Java组真题“饮料换购”

你好呀,我是灰小猿,一个超会写bug的程序猿!

欢迎大家关注我的专栏“每日蓝桥”,该专栏的主要作用是和大家分享近几年蓝桥杯省赛及决赛等真题,解析其中存在的算法思想、数据结构等内容,帮助大家学习到更多的知识和技术!

标题:饮料换购

乐洋洋饮料厂正常举行一次促销优惠活动,乐洋洋C型饮料,凭3个瓶盖可以再换购一瓶C型饮料,并且可以一直循环下去,(但是不允许暂借或者赊账)

请你计算一下,如果小明不浪费瓶盖,尽情的参加活动,那么对于他初始买入的n瓶饮料,最后他一共能喝到多少瓶饮料?

输入:一个正整数n,表示最初购买的饮料数量。(0<n<10000)

输出:一个整数,表示实际得到的饮料数

例如:

用户输入:

100

程序应该输出:
149

 

用户输入:

101

程序应该输出:

151

 

请严格按要求输出,请不要打印类似于“请您输入...”相关的多余文字

所有源码放置在同一个文件中,调试过后,拷贝提交该源码

解题思路:

本题在求解时有两种思路可以参考:

第一种是常规思路:

当我们现在有n瓶饮料的时候,也就是有n个瓶盖,我们计算当前手上的瓶盖可以换取多少瓶饮料,同时还剩多少个瓶盖,把换取的饮料数加上刚才换取后剩余的瓶盖数,就是当前手上有的瓶盖数,那么就又回到了问题最开始的情形,进行递归即可,并将每次换取的新的饮料数累加即可,当手上的瓶盖数小于3个时,不能再进行换购了,那么将最后剩余的瓶盖数加上,即得到最终答案。

第二种思路:

设我们现在有n瓶饮料,记录喝了多少瓶饮料,我们知道每喝三瓶饮料,就可以得到一瓶饮料,那么等于是喝了三瓶饮料,但是剩余没喝的饮料数少了两瓶,利用循环,当剩余的没喝的饮料数小于三时,就不能换购了,这时在用已经喝了的饮料数加剩余的饮料数就是最终答案。

具体的代码解析如下:

答案源码:

第一种解法:

public class Year2015_Bt8 {

	static int ans = 0;
	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		int n = scanner.nextInt();
		ans = n;
		f(n);
		System.out.println(ans);
	}

	private static void f(int n) {
		if (n<3) {
			return ;
		}
		int sum = n/3;
		n = sum + n%3;
		ans += sum;
		f(n);
		
	}

}

第二种解法:

import java.util.Scanner;

public class Year2015_Bt8_2 {

	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		int n = scanner.nextInt();
		int ans = 0;
		while (n>=3) {
			n-=2;
			ans+=3;
		}
		ans+=n;
		System.out.println(ans);
	}

}

输出样例:

其中有不足或者改进的地方,还希望小伙伴留言提出,一起学习!

感兴趣的小伙伴可以关注专栏!

灰小猿陪你一起进步!

猜你喜欢

转载自blog.csdn.net/weixin_44985880/article/details/114847512
今日推荐