es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Intentando hacer que un valor en un bucle sea constante en función de una condición determinada.

Estoy trabajando en un ejercicio y pensé que había terminado hasta que me di cuenta de que algunos de mis resultados estaban mal.

Esta es la función que llamé para obtener el resultado:

System.out.println(chargingSmartPhone(10, 50));

Se espera que devuelva 7. Obtuve 7, pero el cálculo no es correcto.

Se espera que siga esta instrucción:

S = 10, T = 50. En esta condición se aplica R = 10, y la carga se vuelve 10 + 10 = 20.

Ahora la tasa de carga cambia a R = 5, entonces después de 6 minutos más la carga se convierte en 20 + (5+5+5+5+5+5) = 50.

Por lo tanto, el tiempo total es de 7 minutos.

Esto significa que debería tener:

10 + 10

20 <= 10

==========

20 + 5

25 <= 230

==========

25 + 5

30 <= 230

==========

30 + 5

35 <= 230

==========

35 + 5

40 <= 230

==========

40 + 5

45 <= 230

==========

45 + 5

50 <= 230

==========

7

Pero en cambio, tengo este resultado:

10 + 10

20 <= 10

==========

20 + 5

25 <= 230

==========

25 + 8

33 <= 559

==========

33 + 2

35 <= 1009

==========

35 + 7

42 <= 5000

==========

42 + 8

50 <= 10000

==========

50 + 3

53 <= 1000000000

==========

7

Tengo que terminar el programa cuando initialCharge += r[i] es mayor que final, lo cual funciona bien.

A continuación se muestra mi código:

public static int chargingSmartPhone(int initialCharge, int finalCharge){
int count = 0;
int[] v = {10, 230, 559, 1009, 5000, 10000, 1000000000};
int[] r = {10, 5, 8, 2, 7, 8, 3};
for(int i = 0; i < v.length; i++){
if(initialCharge <= finalCharge) { // InitialCharge es S, FinalCharge es T
if (initialCharge <= v[i]) {
System.out.println(initialCharge + ” + ” + r[i]);
initialCharge += r[i];
System.out.println(initialCharge +” <= “+ v[i]);
System.out.println(“==========”);
count++;
}
}
}
return count;
}

public static void main(String[] args){
System.out.println(chargingSmartPhone(10, 50));
}

¿Qué estoy haciendo mal?

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Según las instrucciones proporcionadas, parece que la tasa de carga solo debe cambiar una vez que la carga actual sea mayor o igual al nivel de voltaje actual. Sin embargo, en el código actual, la tasa de carga se cambia tan pronto como la carga inicial es menor o igual al nivel de voltaje actual. Esto está causando el cálculo y resultado incorrectos.

    Para solucionar esto, la declaración if en el código debe modificarse para verificar si la carga inicial es mayor o igual al nivel de voltaje actual antes de cambiar la tasa de carga. El código modificado se vería así:

    public static int cargarTelefonoInteligente(int cargaInicial, int cargaFinal){
        int contador = 0;
        int[] v = {10, 230, 559, 1009, 5000, 10000, 1000000000};
        int[] r = {10, 5, 8, 2, 7, 8, 3};
        int voltajeActual = 0;
        int tasaCargaActual = r[0];
        for(int i = 0; i < v.length; i++){
            voltajeActual = v[i];
            if(cargaInicial < voltajeActual) {
                break;
            }
            tasaCargaActual = r[i];
        }
        while(cargaInicial < cargaFinal) {
            cargaInicial += tasaCargaActual;
            contador++;
            if(cargaInicial >= voltajeActual) {
                tasaCargaActual = r[indiceVoltajeActual + 1];
                voltajeActual = v[indiceVoltajeActual + 1];
            }
            if(cargaInicial > cargaFinal) {
                contador = -1;
                break;
            }
        }
        return contador;
    }
    
    public static void main(String[] args){
        System.out.println(cargarTelefonoInteligente(10, 50));
    }
    

    En el código modificado, se utiliza un bucle while para incrementar la cargaInicial y el contador hasta que se alcance o supere la cargaFinal. Antes de entrar en el bucle, el nivel de voltaje actual y la tasa de carga se inicializan con sus respectivos valores iniciales y se actualizan cada vez que la cargaInicial se vuelve mayor o igual al nivel de voltaje actual. Si la cargaInicial supera la cargaFinal en algún momento del bucle, el contador se establece en -1 y se termina el bucle.

Comments are closed.