空瓶子换汽水的问题

时间:2022-04-19 03:54:11
问题描述:有这样一道智力题:“某商店规定:三个空汽水瓶可以换一瓶汽水。小张手上有十个空汽水瓶,她最多可以换多少瓶汽水喝?”答案是5瓶,方法如下:先用9个空瓶子换3瓶汽水,喝掉3瓶满的,喝完以后4个空瓶子,用3个再换一瓶,喝掉这瓶满的,这时候剩2个空瓶子。然后你让老板先借给你一瓶汽水,喝掉这瓶满的,喝完以后用3个空瓶子换一瓶满的还给老板。如果小张手上有n个空汽水瓶,最多可以换多少瓶汽水喝?
package Day32;
import java.util.*;
public class Test {
public	static int a;
public	static int b;
public	static int c;

	public static void main(String[] args) {
		// TODO Auto-generated method stub
Scanner sc =new Scanner(System.in);
while(sc.hasNext())
{
	int n=sc.nextInt();
	Test t=new Test();
	System.out.println(t.fun(n));
	}
	}
public static int fun(int n)
{
	
  if(n==1)
    {
	return 0;
	}
  else
	{
		b=n/3;
		c=n/3;
	while(b!=0)
	{
	a=n%3;
	c=c+((a+b)/3);
	n=(a+b);
	b=n/3;
	}
	a=n%3;
	if(b==0&&a==2)
	{
		c++;
	}
	}
  return c;
}
}
package Day32;
//牛人的数学总结:喝的饮料数总是空瓶数的一半,但并不是很适用所有情况,如果换成4个空瓶子换汽水呢
//另一中比较好的实现方法,采用递归
/*
递归问题
3个瓶子换1瓶水+1个空瓶子,两个瓶子换1瓶水+0个空瓶子,1个瓶子换0瓶水。
f(1) = 0
f(2) = 1
f(3) = 1
f(4) = f(2)+1    //4个瓶子,其中3个可以换1瓶水+1个空瓶,所以是f(2)+1
f(5) = f(3)+1    //3个瓶子换1瓶水+1个空瓶,所以是f(3)+1
...
f(n) = f(n-2)+1 */
import java.util.*;
public class Test1 {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
Scanner sc =new Scanner(System.in);
int n= sc.nextInt();
System.out.println(f(n));
	}
	public static int f(int n)
	{
		if(n==1)
		{
		return 0;	
		}
		while(n>=2)//是跳出递归的主要条件,很重要
		{
	return (f(n-2)+1);
	}
		return 0;
	}

}