На задачата Find Largest Three Values ми се счупва един от кейсовете.
https://pastebin.com/P3JtnkaQ - това е кодър. Логиката на циклите май ми е вярна и използвах за инициация Integer.MINValue по пример от предишни задачи. Може и затова да се бъзика.
Начини за решение на всяка задача колкото искаш. Това, че пише Loops не значи, че само така ще приеме решението.
Ако сега се готвиш за кандидатстване методите Math ще ти помогнат за много други задачи в Judge.
Edit: относно дали се споменава - предполагам Мишо визираше тази задача, която на практика е почти същата, там в условието се споменава GetMax() - https://judge.telerikacademy.com/problem/02getlargestnumber
Тъй като в задачата се искат също второто и третото най-голямо число, имате ли идея, как Math.max може да се използва за тях? Не успях да намеря подобна възможност.
Моето решение също е с loops и минава всички мои тестове, но не и четвъртия на Judge:
Числото 13 със сигурност не се въвежда от програмата, защото тествах при мен и работи правилно.
Това е основната част от кода ми (във външни if statements тествам също за нужните ограничения):
if (number > max) {
max3 = max2;
max2 = max;
max = number;
} else if (number > max2 && number != max) {
max3 = max2;
max2 = number;
} else if (number > max3 && number != max && number <= max2) {
max3 = number;
}
Ще се радвам на някакви идеи!
Благодаря предварително.
Edit 17.07.19: Решение 100/100
Грешката ми е била, че съм нямал “равно” включено в проверките за първите два loop-a. Така при написване на две равни най-високи числа, или две равни втори числа, едното изчезваше. Ето кодът с правилните ограничения (по-простичък от миналия, какъвто и обикновено трябва да бъде) :- )
if (number >= max) {
max3 = max2;
max2 = max;
max = number;
} else if (number >= max2) {
max3 = max2;
max2 = number;
} else if (number > max3) {
max3 = number;
}
Пепи ако искаш да я решиш само с Math, ето един пример как може да стане това:
int max = Math.Max(num1, num2);
max = Math.Max(max, num3);
int min = Math.Min(num1, num2);
min = Math.Min(min, num3);
int mid = num1 + num2 + num3 - min - max;
https://pastebin.com/ZtY2Zj8E ми дава 80/100 и тъй като Телерик не ни позволяват да си проследим грешките забивам на 80 / 100 без да знам къде е тя.
Ако има някой така добър самарянин нека помага.
Идея с loops: Назначаваш с променлива за мин стойност и за макс стойност, като извъртиш loop-a през входящите данни, сравняваш дали идващото число не е по-малко от минималното или по-голямо от максималното, ако е така в няко сучай, заместваш.
@jory1 Здравей, знам че е малко късно, но все пак, според мен грешката ти е че ползваш 2 лупа, освен това моят е for (int i = 0; i < lines; i++) {
иначе горе съм дала стойности:
Scanner sc = new Scanner(System.in);
String numbers = sc.nextLine();
int lines = Integer.parseInt(numbers);
int largest = -500;
int secondLargest = -500;
int thirdLargest = -500; Освен това трябва да декларираш горе, над Лупа, и int numbers=0;
Ако се направят тези промени, написаният от тебе код би трябвало да проработи
В условието пише,че числата може да са и по-малки от 0,ти сравняваш само числа над 0,защото променливите ти са декларирани като нули.
Също така в if конструкциите правиш ненужни проверки като условия и форматирането на принта,липсва ти една запетайка между largest и second_largest
N = int(input())
largest = -500
second_largest = -500
third_largest = -500
for i in range(N):
number = int(input())
if(number > largest):
third_largest = second_largest
second_largest = largest
largest = number
elif (number > second_largest):
third_largest = second_largest
second_largest = number
elif(number > third_largest):
third_largest = number
print(f'{largest},{second_largest} and {third_largest}')