Проблем със задача Mock Exam 3

Здравейте, колеги. От един ден се мъча със задача Repeating Numbers от Mock exam 3.

Repeating Numbers

Write a program that accepts an array of integers and returns the one that occurs the most times. If there are two numbers that occur the same amount of times, return the smaller of the two.

Input

  • Read from the standard input;
  • The number N is on the first line;
  • An integer between 1 and 10 is written on each of the next N lines;
  • The input data will always be valid and in the format described. There is no need to check it explicitly;

Output

  • Print to the standard output;
  • On the only output line you must print the number that occurs the most;

Constraints

  • The number N is a positive integer between 1 and 100 000, inclusive;
  • The list of numbers consists of positive integers between 1 and 10, inclusive;

Input

4
1
3
3
7

Output

3

В judge ми дава 20/100. Ще се радвам някой ако може да ми даде някакви насоки с какви други инпути да пробвам и да видя къде се чупи.

И също така на изпита ако ми се случи нещо подобно, как да процедирам?

Аз имам същия проблем. Другите задачи ги реших бързо, но тази я въртя вече два дни…

1 Like

Може да прочетете какво е Dictionary и да помислите как да го решите :slight_smile:

Тази задача е леко advanced.

Здравей, пробвай дали този алгоритъм ще ти е по-лесен:

  • сортирай array-a (ще стане нещо като 1,1,1,3,3,3,3,4,6,8,8,8,8)
  • пази:
    targetNumber (това, което ще принтираш накрая),
    maxCount (колко пъти се повтаря числото,което ще принтираш накрая),
    currentNumber(текущото ти число в loop-a),
    currentCount (колко пъти е повторено текущото в Loop-a)
    → тези ще ги ъпдейтваш докато циклиш: докато се повтаря едно и също число, ъпдейтваш му counter-a. Когато попаднеш на ново число, сравняваш currentCount с maxCount. Ако currentCount > maxCount, вземаш новите стойности и ги слагаш за maxCount и targetNumber. Ако currentCount = maxCount, сравняваш currentNumber и targetNumber и вземаш по-малкото (по условие).

с примерния array горе, би трябвало да принтираш 3.

Успех! :slight_smile:

2 Likes

Суперр. Много ти благодаря. Доста по-разбираемо стана. Откарах ги до 80 точки в judge, но все още ми гърмят 2 кейса - 4 и 5. Някаква друга идея с какви инпути да опитам. :smiling_face:

Виж какво става, когато са равни [ 1, 1, 1, 3, 3, 3] :slight_smile:

Изкарва по-малкото от тях - тоест връща 1

Пробвай какво става при [1,1,1,1] или [ ]

В първия случай връща 1, във втория ако нищо не въведа гърми.

Здравей, много набързо прегледах кода, тази валидация накрая не ми се изясни мн, пробвай с инпут
3
1
2
3
Трябва да принтираш 1, а ти принтираш 0, откъде е тая 0 :slight_smile:

п.п. когато пазиш някакви стойности на нещо (примерно targetNumber), не ги оставяй да са 0 / int_min/max value и тн, ами винаги им присвоявай първото срещнато число в кода, за да не стават подобни грешки :slight_smile: Ако логиката е вярна, те така или иначе ще се ъпдейтнат коректно по-нататък при изпълнението на кода.

Успех :slight_smile:

2 Likes