Софтуерно Инженерство
Loading...
+ Нов въпрос
Djombeto avatar Djombeto 5 Точки

HEEEELP

Излизат ми нулевите, а в Джъдж 50/100 и не мога да си намеря грешката... https://pastebin.com/7cdVytvr?fbclid=IwAR3M4dOPpA5-yeryyPu__7rdmOiV5cp16XuR85R8tPk-K1cq6aMD4549tjc

Задача 6. Висок скок
Българският лекоатлет Тихомир Иванов започва тренировки за предстоящото европейско първенство по лека атлетика на закрито в Глазгоу, Шотландия.
Вашата задача е да напишете софтуер, с който Иванов да следи своя прогрес и дали е достигнал желаните резултати. В началото програмата получава желаната височина на летвата от Тихомир, той започва тренировката си като поставя летвата на височина 30см по-ниско от целта. За всяка височина той има право на 3 скока, като за да бъде един скок успешен, той трябва да бъде над височината на летвата. При успешен скок (над летвата), височината й се вдига с 5 сантиметра. При три неуспешни скока на една и съща височина, тренировката приключва с неуспех. При достигане на желаната височина и нейното успешно прескачане, тренировката приключва с успех.
Вход
Входът е поредица от цели числа в интервала [100…300]:
На първия ред се прочита желаната от Тихомир Иванов височина в сантиметри
На всеки следващ ред до приключване на програмата се прочита височината от скока на Иванов 
Изход
На конзолата трябва да се отпечата един ред:
Ако Тихомир не успее да преодолее желаната височина:
"Tihomir failed at {височина на летвата към момента на провала}cm after {брой скокове от началото на тренировката} jumps."
Ако Тихомир успее да преодолее височината:
"Tihomir succeeded, he jumped over {височина на прескочената последно летва}cm after {брой скокове за цялата тренировка} jumps."

Примерен вход и изход
Вход    
231
205
212
213
228
229
230
235  

Обяснения
 Tihomir succeeded, he jumped over 231cm after 7 jumps.    Желана височина: 231 -> Тихомир започва от 201
Първи скок, височина на летвата 201 -> 205, успешен скок
Повдигане на летвата с 5см.
Втори скок, височина на летвата 206 -> 212, успешен скок 
Повдигане на летвата с 5см.
Трети скок, височина на летвата 211 -> 213, успешен скок

Седми скок, височина на летвата 231, желаният от Тихомир резултат, -> 235, успешен скок -> Тихомир приключва тренировката с успех.
Вход    Изход    Обяснения
250
225
224
225
228
231
235
234
235    


Обяснения
Tihomir failed at 235cm after 8 jumps.    Желана височина 250 -> Тихомир започва от 220
Първи скок, височина на летвата 220 -> 225, успешен скок
Повдигане на летвата с 5см.
Втори скок, височина на летвата 225 ->224, неуспешен скок
Трети скок и втори опит на 225 -> 225, неуспешен скок
Четвърти скок и трети опит на 225 -> 228, успешен скок
Повдигане на летвата с 5см.
Пети скок, височина на летвата 230 -> 231, успешен 
Повдигане на летвата с 5см.
Шести скок, височина на летвата 235 -> 235, неуспешен скок
Седми скок и втори опит на 235 -> 234, неуспешен скок
Осми скок и трети (последен) опит на 235 -> 235, неуспешен опит -> Тихомир приключва тренировката без успех.

Тагове:
0
Основи на програмирането 31/10/2019 19:30:04
hm6566 avatar hm6566 40 Точки
Best Answer

Здрасти,

Искаше ми се да запазя оригиналния код, доколкото е възможно, за да ти е по-лесно да се ориентираш, но доста се промени въпреки това. 

 

Основните неща:

=> Нямаш нужда от while-цикъла, а и освен това не е добра практика да ползваш while(true) общо взето.

=> Нямаш нужда от брояч за неуспешните опити, тях ги следиш във for-цикъла.

=> При успешен скок връщаш i = 0 защото на края на цикъла следва инкрементация и новото броене започва от 1.

=> При проверката за успех трябва да сравняваш целта с височината, на която е летвата към момента, а не с височината на скока.

=> При принтирането на информацията за неуспех трябва да принтираш височината, на която е била летвата, а не на последния скок.

 

int desiredHeight = Integer.parseInt(scanner.nextLine());
int heightMinus30cm = desiredHeight - 30;
int unsuccessfulTry = 0;
int jumps = 0;
while (true){
            for (int i = 1; i <= 3 ; i++) {
                int jump = Integer.parseInt(scanner.nextLine());
                jumps++;
                if (jump > heightMinus30cm){
                    heightMinus30cm += 5;
                    unsuccessfulTry = 0;
                    i = 1;
                    if (heightMinus30cm >= desiredHeight){
                        System.out.printf("Tihomir succeeded, he jumped over %dcm after %d jumps.", desiredHeight, jumps);
                        break;
                    }
                    heightMinus30cm += 5;
                    i = 0;
                }else {
                    unsuccessfulTry++;
                    if (i == 3){
                        System.out.printf("Tihomir failed at %dcm after %d jumps.", heightMinus30cm, jumps);
                        break;
                    }
                }
            }
        }
    }
}

 

Успех!

 

0
31/10/2019 21:19:14
Djombeto avatar Djombeto 5 Точки

Благодаря много!

1
31/10/2019 21:33:51