/**
* 有这样一道智力题:“某商店规定:三个空汽水瓶可以换一瓶汽水。小张手上有十个空汽水瓶,
* 她最多可以换多少瓶汽水喝?”答案是5瓶,
* 方法如下:
* 先用9个空瓶子换3瓶汽水,喝掉3瓶满的,喝完以后4个空瓶子,用3个再换一瓶,喝掉这瓶满的,这时候剩2个空瓶子。
* 然后你让老板先借给你一瓶汽水,喝掉这瓶满的,喝完以后用3个空瓶子换一瓶满的还给老板。如果小张手上有n个空汽水瓶,最多可以换多少瓶汽水喝?
*/
1 /** 2 * 有这样一道智力题:“某商店规定:三个空汽水瓶可以换一瓶汽水。小张手上有十个空汽水瓶, 3 * 她最多可以换多少瓶汽水喝?”答案是5瓶, 4 * 方法如下: 5 * 先用9个空瓶子换3瓶汽水,喝掉3瓶满的,喝完以后4个空瓶子,用3个再换一瓶,喝掉这瓶满的,这时候剩2个空瓶子。 6 * 然后你让老板先借给你一瓶汽水,喝掉这瓶满的,喝完以后用3个空瓶子换一瓶满的还给老板。如果小张手上有n个空汽水瓶,最多可以换多少瓶汽水喝? 7 */import java.io.IOException; 8 9 import java.util.Scanner; 10 11 public class Main{ 12 public static void main(String[] args) throws IOException { 13 Scanner sc = new Scanner(System.in); 14 while(sc.hasNext()){ 15 int n = sc.nextInt(); 16 if(n>=1 && n<=100){ 17 System.out.println(getNum(n)); 18 }else{ 19 break; 20 } 21 } 22 } 23 24 //递归求解 25 public static int getNum(int n) { 26 if(n<1 && n>100){ 27 return -1; 28 } 29 if(n == 1){ 30 return 0; 31 } 32 //如果有两个空瓶子,可以换一瓶水 33 if(n == 2){ 34 return 1; 35 } 36 // n/3得到的是当前n个空瓶子可以直接换取多少瓶水 37 // n%3求的是 当前n个空瓶子换了若干瓶水之后,还剩多少个空瓶子,再加3,就是下一轮可以用来换水的空瓶子总数 38 39 return n/3+getNum(n%3 + n/3); 40 } 41 }
原文地址:https://www.cnblogs.com/sun-/p/12676484.html
时间: 2024-11-10 11:07:46