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?
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í:
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.