Loading...
Daniel111 avatar Daniel111 11 Точки

проблем със задачата Most Frequent Number

Здравейте оптивам се да реша задачата Most Frequent Number. Получвам верен output на всички тестове без тези които трябва да се изкарат всички повтарящи се числа.

 

код https://pastebin.com/0F6FW9vK

като този output:

 

11

7 7 7 0 2 2 2 0 9 9 9

2 7 9

The numbers 2, 7 and 9 have the same maximal frequence (each occurs 3 times).

 

Тагове:
0
C++ Fundamentals 30/03/2020 15:17:10
MartinBG avatar MartinBG 4803 Точки
Best Answer

В условието на задачата има едно важно уточнение, което я улеснява много, но не е използвано в твето решение:

Numbers will be in the range [0…9].

Ако вземем предвид горното, можем да решим задачата само с един int масив от 10 елемента, всеки от които се използва като брояч за числото, съответстващо на индекса му, и една променлива, която пази най-високият брой повторения на кое да е число.

 

Опитай да я решиш така и пиши, ако ти трябват още указания или има проблем.

 

0
Daniel111 avatar Daniel111 11 Точки

Здравей, извинявай за закъснението.

Успях да направя задачата с кода за който имах въпрос, но имам още два въпроса

ето го https://pastebin.com/QPvbr9hV

Първият е както казахте да използваме един масив от 10 елемента.И видях решението на @kolioi

#include <iostream>
int main()
{
	using namespace std;

	int length;
	cin >> length;

	int frequency[10] = {0};
	for (int i = 0; i < length; ++i)
	{
		int n;
		cin >> n;
		frequency[n]++;
	}

	int max_frequency = 0;
	for (int i = 0; i < 10; ++i)
		if (max_frequency < frequency[i])
			max_frequency = frequency[i];

	for (int i = 0; i < 10; ++i)
		if (frequency[i] == max_frequency)
			cout << i << ' ';

	return 0;
}

 

но не разбирам ето тази част от кода :

int frequency[10] = {0};
	for (int i = 0; i < length; ++i)
	{
		int n;
		cin >> n;
		frequency[n]++;
	}

 и творият ми въпрос е от моето решение.Опитах се да използвам итератори, но ми дава много грешки :

    vector<int>::iterator it;
    vector<int>::iterator it2;
    for (it = numbers.begin(); it != numbers.end(); ++it)
    {  
        for (it2 = numbers.begin(); it2 != numbers.end(); ++it2)
         {
              if(numbers.at(*it) == numbers.at(*it2))
                {
                     it=numbers.erase(it2);
                     
                }
         }
   
    }

 

0
04/04/2020 11:44:41
MartinBG avatar MartinBG 4803 Точки

Пo първия въпрос:

int frequency[10] = {0};  // създава int масив с 10 елемента (индекси 0..9), всички инициализирани с 0
for (int i = 0; i < length; ++i) // прочитане на числата (по условие те са със стойност от 0 до 9 вкл.)
{
	int n;
	cin >> n; // n = число (0..9)
	frequency[n]++; // използваме n като индекс в frequency и увеличаваме стойността на frequency[n] с 1 
}

Относно итераторите - какво искаш да постигнеш с този код и какви са грешките?

0
Daniel111 avatar Daniel111 11 Точки

Здраей логигата ми е да направя 2-ва вложени цъкъла с итератори , които обхождата вектора с повтарящи се числа : примерно ако инпута е

5

1 2 2 4 4 -> и във вектора които обхождаме  са числата 2 2 4 4 и с итераторите искам да изтрия повтарящите се числа и да останат  2 4. И след това да ги изкарам

https://pastebin.com/cErABka9

А  грешката която ми дава компилатора е ->

terminate called after throwing an instance of 'std::out_of_range'
  what():  vector::_M_range_check: __n (which is 4) >= this->size() (which is 3)
Aborted

0
04/04/2020 18:45:45
MartinBG avatar MartinBG 4803 Точки

Така написан, кодът ти няма да свърши това, което искаш, и не мисля, че има валиден (практически) начин за обхождане на една колекция с два отделни итератора във вложени цикли, съчетано с модифициране на колекцията (триене на елемент) през един от итераторите.

Най-добре ще разбереш какво се случва и защо не работи, ако пуснеш програмата в debug и видиш какво се случва с колекцията и итераторите, когато изтриеш елемент.

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