Java代码怎么写:有20块钱买汽水,1块一瓶,三盖子换一瓶,两空瓶换一瓶子,共能买多少汽水?

Java代码怎么写:有20块钱买汽水,1块一瓶,三盖子换一瓶,两空瓶换一瓶子,共能买多少汽水?,第1张

正确的结果:对兑了17次,共换了93个瓶子,第18次对兑时余下1个空瓶,2个瓶盖。

递归模型楼上“lzs丶灬 ”同志是正确的,但存在逻辑错误。我帮他修正如下:

   public static int test(int sum, int pingzi, int gaizi){

            if (pingzi < 2 && gaizi < 3)

            {

                return sum

            }

            int newPingzi = pingzi / 2

            int newGaizi = gaizi / 3

            sum += newPingzi

            sum += newGaizi

            pingzi = newPingzi + newGaizi + pingzi % 2

            gaizi = newGaizi + newPingzi + gaizi % 3

            return test(sum, pingzi, gaizi)

  }

其实,最多可以喝50瓶酒~

public class TestBottle {

public static void main(String[] args) {

int all=drink(100)

System.out.println("最多可以喝"+all+"瓶酒。")

}

public static int drink(int bottle){

int dr=0//初始化可以喝的酒数

while (bottle >1) {//当酒瓶大于一时,可以兑换

dr+=bottle/3//总共兑换的酒数目=兑换酒数(he)+本轮可以兑换的酒数(num/3)

bottle=bottle/3+bottle%3//剩下瓶子数目=本轮可以兑换的酒数(num/3)+剩下的瓶子数(bottle%3)

if(2==bottle){//当最后剩下两个瓶子时,可以借一个瓶子,凑成三个,然后兑换一瓶酒,喝完后还回瓶子

dr++//可以喝的酒数加一

bottle=0//剩下0个瓶子

}

}

return dr

}

}

//-------------------------------正向的算法,就是知道N和M算出P----------------------------------------

int left=0,sum=0,newBott=0

int N=34,M=3//要改M,N值在这里

newBott = N

sum =N

if(M==1){System.out.println("无限换")}

else

{

while((newBott+left)>=M) //如果还能换

{

int temp1 = (newBott+left)%M //换了之后剩下不够换的

int temp2 = (newBott+left)/M //换出来新的

left = temp1

newBott = temp2

sum = sum + newBott + left//总数增加

}

System.out.println("一共可换 "+sum+ " 瓶")

}

//------------------------------反向算法,就是知道P,M算出N---------------------------------------------

int left=0,sum=0,newBott=0

int N,M=15,P=222//要改M,P值在这里改

labelA: for(N=MN<PN++)

{

if(M==1){N=1System.out.println("需要 "+ N+ "瓶")break} //如果可以1瓶换1瓶,那就只用1瓶

if(M==0){N=PSystem.out.println("需要 "+ N+ "瓶")break} //如果可以1瓶换0瓶,那就用P瓶

sum =N

newBott = N

while((newBott+left)>M)

{

int temp1 = (newBott+left)%M

int temp2 = (newBott+left)/M

left = temp1

newBott = temp2

sum = sum + newBott + left

if(P==sum){System.out.println("需要 "+ N+ "瓶")

break labelA}

}

}

//--------------------------------------------------------------------------------


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/8041734.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-12
下一篇2023-04-12

发表评论

登录后才能评论

评论列表(0条)

    保存