Loading...

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

BorisMarinov avatar BorisMarinov 0 Точки

Проблем със задача 4, от второто домашно. ( Most Frequent Number)

Здравейте, някой може ли да ми помогне да си изведа стойностите за maxValue и equalValues, от първия вектор (vector). В момента ми извежда клетката от паметта, в която са копирани.

// 4.BasicSyntaxMostFrequentNumber.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <iostream>
#include <vector>
#include <algorithm>

void mostFrequentNumber(std::vector <int> vector, int vectorSize)
{
	int counterZeroes = 0, counterOnes = 0, counterTwos = 0, counterThrees = 0, counterFours = 0, counterFives = 0,
		counterSixs = 0, counterSevens = 0, counterEights = 0, counterNines = 0;
	int maxValue = 0;
	for (int i = 0; i < vectorSize; i++)
	{
		switch (vector[i])
		{
		case 0:counterZeroes++;
			break;
		case 1:counterOnes++;
			break;
		case 2:counterTwos++;
			break;
		case 3:counterThrees++;
			break;
		case 4:counterFours++;
			break;
		case 5:counterFives++;
			break;
		case 6:counterSixs++;
			break;
		case 7:counterSevens++;
			break;
		case 8:counterEights++;
			break;
		case 9:counterNines++;
			break;
		}
	}
	
	 std::vector<int>counters{ counterZeroes, counterOnes, counterTwos, counterThrees, counterFours, counterFives, counterSixs,
							  counterSevens, counterEights, counterNines };
	
	 counters.erase(std::remove(counters.begin(), counters.end(), 0), counters.end());

	 std::vector<int>equalValues;

	 for (int i = 0; i < counters.size(); i++)
	 {
		 std::cout << counters[i] << std::endl;

		 if (i > 0) 
		 {
			 if (counters[i] > counters[i - 1])
			 {
				 maxValue = counters[i];

			 }
			 else if (counters[i] == counters[i - 1] && counters[i] == maxValue)
			 {
				 equalValues.push_back(counters[i]);
			 }
		 }
	}
			 
	std::cout << &maxValue << std::endl;


	 for (int i = 0; i < equalValues.size(); i++)
	 {
		 std::cout << &equalValues[i] << std::endl;
	 }
}

int main()
{
	int vectorLength;
	std::cin >> vectorLength;
	std::vector<int>v;
	for (int i = 0; i < vectorLength; i++)
	{
		static int number;
		std::cin >> number;
		v.push_back(number);
	}
	mostFrequentNumber(v, vectorLength);
    return 0;
}


 

Тагове:
0
C++ Fundamentals
georgi.stef.georgiev avatar georgi.stef.georgiev 921 Точки

Здравей

Извежда ти адресите, защото изрично му казваш да ти изведи адресите - когато напишеш

cout << &maxValue << endl;

Амперсандът (&) означава "дай ми адреса". Същото и за equalValues. Защо го добавяш този амперсанд? Просто печатай стойностите на тези променливи:

cout << maxValue << endl;

Нещо друго: защо правиш 10 променливи, които си играеш да променяш със switch-case, вместо да ползваш индексите на вектор/масив? Едно че повтаряш много код така, друго, че ако задачата е за числата до 20, до 30, до 100, кодът ти ще стане огромен. Нали затова имаме вектори и масиви и гововирхме, че основното им предимство пред променливите е, че можеш да достъпваш индексите програматично, докато с променливите трябва да пишеш различен код за всяка променлива (както ти правиш).

Тоест, защо не направиш вектора с 10 елемента в началото, които са нули (std::vector<int> counters{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };), и в цикъла после просто:

counters[vector[i]]++;

// или малко по-четимо:
number = vector[i];
counters[number]++;

вместо да го switch-ваш.

Сега забелязах, че цикълът ти върви до vectorSize - защо ти е този параметър, векторът си има vector.size();? Не че е грешно, ама защо да подаваш параметър, чията стойност можеш да я вземеш и от самия вектор.

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

Поздрави,

Жоро

0
26/11/2017 18:42:30
BorisMarinov avatar BorisMarinov 0 Точки

Благодаря ти. Оправих всичко.

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