Problema de 1 algoritmo: botella vacía para agua

/ **
* 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 }

 

Supongo que te gusta

Origin www.cnblogs.com/sun-/p/12676484.html
Recomendado
Clasificación