/ **
* Hay un rompecabezas: "Una tienda estipula: tres botellas de refresco vacías se pueden cambiar por una botella de refresco. Xiao Zhang tiene diez botellas de refresco vacías en
la mano. * ¿Cuántas botellas de refresco puede beber como máximo?" La respuesta es 5 botellas,
* El método es el siguiente:
* Primero reemplace 9 botellas vacías por 3 botellas de refresco, beba 3 botellas llenas, después de beber 4 botellas vacías, use 3 nuevamente para otra botella, beba esta botella llena, esto Quedan 2 botellas vacías.
* Luego dejas que el jefe te preste primero una botella de refresco, bebe la botella llena y usa 3 botellas vacías para reemplazar la botella llena con el jefe. Si Xiao Zhang no tiene botellas de refresco vacías en la mano, ¿cuántas botellas puede cambiar?
* /
1 / ** 2 * Hay un acertijo: "Una tienda estipula: tres botellas de refresco vacías se pueden cambiar por una botella de refresco. Xiao Zhang tiene diez botellas de refresco vacías en su mano. 3 * ¿Cuántas botellas de refresco puede beber como máximo? "La respuesta es 5 botellas, 4 * El método es el siguiente: 5 * Primero reemplace 9 botellas vacías por 3 botellas de refresco, beba 3 botellas llenas, después de beber 4 botellas vacías, use 3 para otra botella, beba esto Cuando la botella está llena, quedan 2 botellas vacías. 6 * Luego dejas que el jefe te preste primero una botella de refresco, bebe la botella llena y usa 3 botellas vacías para reemplazar la botella llena con el jefe después de beber. Si Xiao Zhang tiene n botellas de refrescos vacías en la mano, ¿cuántas botellas puede cambiar? 7 * / import java.io.IOException; 8 9 import java.util.Scanner; 10 11 public class Main { 12 public static void main (String [] args) lanza IOException { 13 Scanner sc = new Escáner (System.in); 14 while (sc.hasNext ()) { 15 int n = sc.nextInt (); 16 if (n> = 1 && n <= 100 ) { 17 System.out.println (getNum (n)); 18 } más { 19 descanso ; 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 // Si hay dos botellas vacías, puede cambiar una botella de agua 33 if (n == 2 ) { 34 return 1 ; 35 } 36 // Lo que n / 3 obtiene es cuántas botellas de agua se pueden intercambiar directamente por las n botellas vacías 37 // n% 3 encuentra cuántas botellas vacías quedan después de que las n botellas vacías se hayan reemplazado por algunas botellas de agua, y luego agregue 3, el número total de botellas vacías que se pueden usar para cambiar el agua en la siguiente ronda 38 39 return n / 3 + getNum (n% 3 + n / 3 ); 40 } 41 }