Którego elementu w tablicy jest najwięcej

0
 // Tablica jednowymiarowa elementów typu int, rozmiar pobierany od użytkownika. Elementy losowane z przedziału <2, 20>. Wyznacz, którego elementu jest najwięcej.

#include <iostream>
#include <ctime>
#include <cstdlib>

using namespace std;

int main()
{
	srand(time(NULL));

	cout << "Rozmiar tablicy:" << endl;
	int r = 0;
	cin >> r;
	cin.get();

	int* tab = new int[r];

	for (int i = 0; i < r; ++i)
	{
		tab[i] = 2 + rand() % 19;
	}

	for (int i = 0; i < r; ++i)
	{
		cout << tab[i] << "\t";
	}

	


	

	cin.get();
	return 0;
}

Jak powinna wyglądać ostatnia pętla w której będzie algorytm odpowiedzialny za wyznaczenie elementu, którego jest najwięcej?
Dzięki.

2

Zrób sobie tablicę pomocniczą na zliczenia, przeleć pętlą po pierwotnej tablicy (tej z losowymi liczbami) i policz wystąpienia każdej z liczb, znajdź maksimum w tabeli zliczeń.

Swoją drogą, od C++11 są już lepsze (bo zapewniające jednorodny rozkład) metody na generowanie losowych intów: http://en.cppreference.com/w/cpp/numeric/random

0

Nie bardzo wiem w jaki sposób mam policzyć wystąpienia każdej z liczb.

1

Jako że dopuszczalne liczby są z przedziału [2; 20], to robisz sobie tablicę int counts[19] (bo masz dziewiętnaście możliwości) i teraz każdej liczbie n odpowiada pozycja counts[n-2]. Zliczanie w pętli będzie wyglądać tak:

for (int i = 0; i < r; ++i) {
    ++counts[tab[i] - 2];
}
3
#include <iostream>
#include <random>
#include <vector>
#include <map>

int main()
{
    std::random_device rd;
    std::mt19937 gen(rd());
    int start = 2;
    int stop = 20;
    std::uniform_int_distribution<> dist(start, stop);

    std::size_t size;
    std::cin >> size;
    std::vector<int> numbers(size); // kontener (tablica dynamiczna)
    for (auto& el: numbers) {
        el = dist(gen); // losowanie liczby i zapisanie do aktualnego elementu tablicy
        //std::cout << el << ' ';  // kontorlne wypisanie wylosowanej wartości
    }
    std::cout << '\n';

    std::map<int, int> occured_numbers; // kontener mapa, przechowuje pary wartości
    for (auto const& el : numbers) {
        ++occured_numbers[el]; // zliczanie poszczególnych liczb
    }

    int index{};
    int max_occured_value{};
    for (auto const& el : occured_numbers) {
        if (index < el.second) { // szukanie wartości o największej liczbie wystąpień
            max_occured_value = el.first; // zapamiętanie liczby
            index = el.second; // zapamiętanie liczby wystąpień
        }
    }

    std::cout << max_occured_value << " i wystepuje " << index <<  "razy.\n";
}

std::map
std::vector
pętla oparta na zakresie

0

Mam podobne zadanie tylko ze troche trudniejsze ,ale to co potrzebujessz zrobiłem https://4programmers.net/Forum/C_i_C++/283943-zadanie_na_egzamin_z_pp_c tu znajdziesz kod

1 użytkowników online, w tym zalogowanych: 0, gości: 1