Loading...

Във форума е въведено ограничение, което позволява на потребителите единствено да разглеждат публикуваните въпроси.

l000p avatar l000p 13 Точки

Most Frequent Number C++ Fundamentals

Здравейте, тази задача доста ме "озори", но най-после открих решение. 
https://pastebin.com/X0nnFh54-Решение


https://judge.softuni.bg/Contests/Compete/Index/1349#3-Judge


https://softuni.bg/trainings/resources/officedocument/42363/homework-problem-descriptions-c-plus-plus-fundamentals-september-2019/2402- Условие, намира се на 4-та позиция.

Пиша темата, за да открия по-елегантен или рационален начин за решение. Това което най-много ме затормозява е как щях да я реша ако числата не бяха от 0 до 9? По моето решение с още някой друг ред може да се случи, но няма ли да изконсумира прекалено много ресурс от машината ??


Това което искам да видя е най-икономичното решение от гледна точка на обработка, което имплементира само познатите ни за сега структори от данни (array & vector).


Благодаря за вниманието. :) 

 

 

1
C++ Fundamentals 16/09/2019 00:04:57
marki02 avatar marki02 1 Точки

Колега,

Окуражавам те да прочетеш ето тази малка статийка за конструкцията pair - много е полезна и е сравнително простичка:
https://www.geeksforgeeks.org/pair-in-cpp-stl/

Първото решение, за което се сетих беше с масив/вектор от pair-и, като в първата клетка на pair-a държиш числото, а във втората държиш броя на пътите, в които то се е срещало. Ето ти първия вид решение: 
https://pastebin.com/TudftASZ

Но все пак видях, че желаеш решение само с вектори/масиви за по-генералния случай, така че единият вариант, за който се сетих е с двумерен масив - много подобно на решението с pair-ите. Общо взето в горната клетка пазиш числото, а в долната - броя пъти, в които си го срещнал. Това е решението с двумерен масив:
https://pastebin.com/ebUqTh9X
А ако искаш да става динамично и не искаш да слагаш някаква константа за бр. клетки - еквивалентът е с вектор от вектори (или още по-добре - вектор от тип pair<int, int>).

И последният вариант, който мога да ти предложа е с единичен вектор, при който всяка четна клетка ти е числото, а всяка нечетна - броят на пътите, в които числото от предната клетка се среща. Т.е. първото число ти е в клетка №0, а counter-а ти за това число е в клетка №1, после - второто ти число е в клетка №2, а counter-а ти за това число е в клетка №3 и т.н. Генерално: i-тото ти число е в клетка № (2*i - 2), а в клетка № (2*i - 1) ти се намира броя на срещанията му. Ето го и това решение:
https://pastebin.com/HjQp9nYT

Сложил съм и коментари за по-лесно разчитане на кода. 
Успех!
 

0
16/09/2019 22:34:12
BozhidarKlouchek avatar BozhidarKlouchek 24 Точки

О мале това е златна мина, благодаря ти! 
Никога преди не бях чувал за pair, това наистина е много полезно!

0
16/09/2019 23:10:01
j.petrov_90 avatar j.petrov_90 373 Точки

Привет, колега,

Браво за усилията, които си положил.
Виждам, че си напред със знанията и това ме кара да бъща щастлив.
Точно поради този факт ще си позволя да отправя към теб професионална критика, която не успорва верноста на решението ти.

Избягвай да ползваш глобални променливи.
Използвай локални променливи, които придаваш като аргументи на функциите ти.
Глобалните променливи изглеждат "бързия и лесен начин" да си накодиш решението за задача от такъв малък калибер.
Те ще са твоя враг, когато започнеш да пишеш истински програми и гарантирано ще доведат до "мазало" или така наречения "спагети код".
Добрите практики, обаче е хубаво човек да започне да се учи от рано на тях.

Поздрави,
Живко

0
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.