Find Largest Three Values

Здравейте,

На задачата Find Largest Three Values ми се счупва един от кейсовете.

https://pastebin.com/P3JtnkaQ - това е кодър. Логиката на циклите май ми е вярна и използвах за инициация Integer.MINValue по пример от предишни задачи. Може и затова да се бъзика.

1 Like

Здравей Теди,

Задачата се решава с Math.Max / GetMax() в замисимост от езика, ето една идея, как да намериш максималното число:

int max = Math.Max(num1, num2);
max = Math.Max(max, num3);

Успех

1 Like

Това не са ли функции, които се ползват при масиви?

Задачата трябва да се реши само с луупове.

1 Like

Здравей Теди,

Не са функции на масива, това са функции на статичния клас Math, като цяло задачата може да бъде решена без цикъл.

Съвета ми е да видиш какво прави Math.Max, както е записано в условието.

Поздрави,
Мишо

1 Like

Това е условието в contest Loops:

Write a program that, that finds the three largest numbers in a sequence and prints them in descending order in the following format:

{largest}, {second_largest} and {third_largest} .

See the example for clarity

Никъде не се споменва за Math.Max та затова се чудя.

1 Like

Начини за решение на всяка задача колкото искаш. Това, че пише Loops не значи, че само така ще приеме решението.
Ако сега се готвиш за кандидатстване методите Math ще ти помогнат за много други задачи в Judge. :slight_smile:
Edit: относно дали се споменава - предполагам Мишо визираше тази задача, която на практика е почти същата, там в условието се споменава GetMax() - https://judge.telerikacademy.com/problem/02getlargestnumber

2 Likes

Здравейте,

Тъй като в задачата се искат също второто и третото най-голямо число, имате ли идея, как Math.max може да се използва за тях? Не успях да намеря подобна възможност.

Моето решение също е с loops и минава всички мои тестове, но не и четвъртия на Judge:
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;
}

Поздрави,
Петър

1 Like

Аз лично бих препоръчал тук да разгледаш какво прави Array.Sort :wink:

Пепи ако искаш да я решиш само с 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;

Успех

2 Likes

Привет!
При мен също се чупи на test case #4, но изписва, че output-ът ми е 14, 12 and 11.
hFrcc7C
Кодът ми: https://pastebin.com/PZ88Uiih

Не искам да ползвам arrays за решаване на задачата, тъй като се предполага, че още не трябва да знам за тях.

Въпросът ми е дали има начин judge да не изкарва test case #4 като грешен, при излползане единствено на loops & conditional statements.

П.П. Тествах да симулирам case #4 като добавих и числото 13 и всичко работеше нормално в IDE-то.

Здравей,

Грешката ти е в проверките. Ето едно разписано решение без масиви - https://pastebin.com/EQsnhYHL

Поздрави

4 Likes

И на мен ми излиза 80/100 при output 0,0 and 0 ми дава грешка при условие

Write a program that, that finds the three largest numbers in a sequence and prints them in descending order in the following format:

{largest}, {second_largest} and {third_largest} .

See the example for clarity

Input

  • On the first line you will receive one number - N - the count of numbers to follow.
  • On the next N lines you will receive the sequence of numbers, each on a new line.

https://pastebin.com/CTMD6Pwp

Както и за :

https://pastebin.com/ZtY2Zj8E ми дава 80/100 и тъй като Телерик не ни позволяват да си проследим грешките забивам на 80 / 100 без да знам къде е тя.
Ако има някой така добър самарянин нека помага.

Идея: Събираш в арей, сортираш низходящо, принтираш първите 3 :wink:

1 Like

Тъй като loops са преди arrays не е ли по-логично да научим първо loops като loops без array

и след това да минем на стъпката array или няма логика в подредбата на упражненията като цяло?

Идея с loops: Назначаваш с променлива за мин стойност и за макс стойност, като извъртиш loop-a през входящите данни, сравняваш дали идващото число не е по-малко от минималното или по-голямо от максималното, ако е така в няко сучай, заместваш.

1 Like

you have missed one " = "
should be:
if (input >= max1) {

you have wrote only " > "
therefore it couldn’t include the desired result

I had the same problem with another task and spent three days unitl I figured it out. It’s hardly noticable lol

1 Like

@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;

Ако се направят тези промени, написаният от тебе код би трябвало да проработи :slightly_smiling_face:

И аз исках с арей, да си добавя този input, и после да си сравня стойностите, но в крайна сметка не без помощта на Foruma и Stackoverflow стигнах до :slight_smile:

Здравейте,

Дали някой може да удари едно рамо със задачата в Python
ето го кодът ми:import mathimport sysN = int(input())each_number = 0largest = 0secon - Pastebin.com.
и условието:

Find Largest Three Values

Write a program that, that finds the three largest numbers in a sequence and prints them in descending order in the following format:

{largest}, {second_largest} and {third_largest} .

See the example for clarity

Input

  • On the first line you will receive one number - N - the count of numbers to follow.
  • On the next N lines you will receive the sequence of numbers, each on a new line.

Output

  • Output the three largest numbers in the already described format.

Constraints

  • 3 <= N <= 20
  • -500 <= each number <= 500

Input

3
3
1
2

Output

3, 2 and 1

Input

6
9
11
3
2
1
8

Output

11, 9 and 8

В условието пише,че числата може да са и по-малки от 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}')