Я пытаюсь сделать мой алгоритм более эффективным, но по какой-то причине он работает неправильно, кто-то может сказать мне, если моя логика верна. Общая проблема заключается в том, что если у вас есть высота 'x', и вы можете прыгнуть на расстояние 'u', но вы упали на расстояние 'd', если вы еще не очистили высоту. Я должен рассчитать количество прыжков.
Исходный код работает правильно
while(x-u>0) {
x=x-u+d;
i++;
}
i++;
более эффективный код (по некоторым причинам в некоторых случаях происходит сбой, хотя я не знаю, в каких случаях)
int k=u-d;
if(x-u<=0){
i++;
} else {
int z=x/k;
if (x-((z-1)*k)-u <= 0) {
i+=z;
} else {
i=i+z+1;
}
}
позвольте мне попытаться прояснить проблему, у вас есть стена высотой X, вы можете прыгнуть на расстояние U, но каждый раз, когда вы прыгаете, вы также проскальзываете на расстояние D.
так скажем, если у вас есть стена высотой x = 4, u = 4, d = 1. Тогда вам придется прыгать только один раз, потому что при первом прыжке вы очистили стену, поэтому вы вообще не сползаете. Теперь давайте скажем, x = 6, u = 4, d = 1. Тогда вам придется прыгать дважды, потому что в первый раз вы прыгаете до 4, но падаете 1, поэтому вы находитесь на 3, а после следующего прыжка вы очищаете стену.