x-kom hosting

C++, najczęściej występująca liczba

elastyna
utworzono
utworzono (edytowane)

Zadanie:Wpisz do tablicy stu elementowej liczby od -9 do 9,wypisz liczbę która najczęściej występuje.
Jak do tej pory napisałem tyle:

#include<iostream>
#include<cstdlib>
#include<cmath>
#include<ctime>
using namespace std;
main()
 
{
int tab[99];//wylosowane liczby
int liczby[19];//liczby od -9 do 9
int naj[19];//tablica która zlicza
int g=-9;
for(int i=0;i<99;i++)//losowanie do tablicy stu elemntowej liczb od -9 do 9
{
tab[i]=-9+rand()%(9+9+1);
cout<<tab[i]<<endl;
}
 
 
for(int i=0;i<19;i++)//zliczanie
{
for(int j=0;j<100;j++)
{
liczby[i]=g;
if(liczby[i]==tab[j])
naj[i]++;
cout<<naj[i]<<endl;
}
g++;
}
cin.get();
cin.get();
return 0;
}

Ale trochę sam się zgubiłem w tym co piszę, chcę to zrobić na trzech tablicach, niestety ten program nie działa. 
 
 
 
int tab[99];//wylosowane liczby
int liczby[19];//liczby od -9 do 9
int naj[19];//tablica która zlicza
int g=-9;
for(int i=0;i<99;i++)//losowanie do tablicy stu elemntowej liczb od -9 do 9
{
tab[i]=-9+rand()%(9+9+1);
// cout<<tab[i]<<endl;
}
 
for(int c=0;c<19;c++) //wypełnianie tablicy od -9 do 9
{
liczby[c]=g;
g++;
cout<<liczby[c]<<endl;
}
 
for(int f=0;f<19;f++)
{
for(int j=0;j<99;j++)
{
if(liczby[f]==tab[j]) {naj[f]++;}
}
cout<<naj[f]<<endl;
}

jeszcze wymyśliłem coś takiego, ale również nie chce działać

Matematyk0
komentarz
komentarz

Niech zgadnę - w wyniku wywala liczby z kosmosu, grube miliony? Nie wyzerowałeś tablicy do zliczania. To podstawa jeżeli chcesz to tak robić.

 

 

Najłatwiej by było po wylosowaniu pozliczać je do jednej tablicy:

int zliczanie[19]; //tablica do zliczania liczb
for (int i = 0; i < 19; i++)
   zliczanie[i] = 0; //wyzerowanie tablicy, inaczej wywali jakieś chore liczby

for (int i = 0; i < 100; i++)
   zliczanie[tab[i]+9]++; //zwieksza o jeden ilosc liczby, ktora jest zapisana w tab[i], +9, bo indeksy od 0

int max = 0, maxi; //najwieksza liczba wystapien liczb (max) i jaka to liczba (maxi)

for (int i = 0; i < 19; i++)
   if (zliczanie[i] > max)
   {
      max = zliczanie[i];
      maxi = i;
   }

cout << "Najczesciej powtarza sie " << maxi-9 << ", ilosc wystapien: " << max << endl;

Jeżeli niczego nie popieprzyłem, powinno działać.

Xainty
komentarz
komentarz
#include <iostream>
#include <cstdlib>
#include <ctime>

int main()
{
	srand(time(NULL));
	const int size = 100;
	const int size2 = 20;
	int tab[size];
	int tab2[size2];
	int tab3[size2];
	int najwiecej_razy = 0;

	

	for (int i = 0; i < size2; i++)
	{
		tab2[i] = 0;
		tab3[i] = i - 9;
	}

	for (int i = 0; i < size; i++)
	{
		tab[i] = (rand() % 19) - 9;
		switch (tab[i])
		{
		case -9:
			tab2[0]++;
			break;
		case -8:
			tab2[1]++;
			break;
		case -7:
			tab2[2]++;
			break;
		case -6:
			tab2[3]++;
			break;
		case -5:
			tab2[4]++;
			break;
		case -4:
			tab2[5]++;
			break;
		case -3:
			tab2[6]++;
			break;
		case -2:
			tab2[7]++;
			break;
		case -1:
			tab2[8]++;
			break;
		case 0:
			tab2[9]++;
			break;
		case 1:
			tab2[10]++;
			break;
		case 2:
			tab2[11]++;
			break;
		case 3:
			tab2[12]++;
			break;
		case 4:
			tab2[13]++;
			break;
		case 5:
			tab2[14]++;
			break;
		case 6:
			tab2[15]++;
			break;
		case 7:
			tab2[17]++;
			break;
		case 8:
			tab2[18]++;
			break;
		case 9:
			tab2[19]++;
			break;
		}
	}

	for (int i = 0; i < size2; i++)
		if (tab2[i] > tab2[najwiecej_razy]) 
			najwiecej_razy = i;
		
	printf("Liczba %d wystapila najwiecej razy (%d)", tab3[najwiecej_razy], tab2[najwiecej_razy]);

	getchar();

	return 0;
}
Matematyk0
komentarz
komentarz

Xainty, mój sposób zliczania (zliczanie[tab[i]+9]++) jest ciut prostszy i szybszy niż 19 case'ów ;p

Xainty
komentarz
komentarz

Matematyk, jest wiem, bez zastanowienia pisałem i dałem odpowiedź bo nie widziałem, że już ktoś odpisał ;)

Matematyk0
komentarz
komentarz

I tak najważniejsze, żeby działało, później można się bawić w optymalizację :P

elastyna
komentarz
komentarz (edytowane)

{
int tab[99];//wylosowane liczby
int liczby[19];//liczby od -9 do 9
int naj[19];//tablica która zlicza
int g=-9,s=-9;

for(int i=0;i<99;i++)//losowanie do tablicy stu elemntowej liczb od -9 do 9
{
tab[i]=-9+rand()%(9+9+1);
// cout<<tab[i]<<endl;
}

for(int c=0;c<19;c++) //wypełnianie tablicy od -9 do 9
{
liczby[c]=g;
g++;
naj[c]=0;
// cout<<liczby[c]<<endl;
}


for(int f=0;f<19;f++)
{
for(int j=0;j<99;j++)
{
if(liczby[f]==tab[j]) {naj[f]++;}
}
cout<<s<<"= "<<naj[f]<<endl;
s++;
}

Tak ostatecznie napisałem, zlicza na pewno dobrze, a znalezienie najczęściej występującej liczby to już żaden problem.

Xainty
komentarz
komentarz (edytowane)

Nie używaj couta tylko printfa, cout jest dużo dużo wolniejszy.
 

 

tab[i]=-9+rand()%(9+9+1);

btw co to za dziwny sposób losowania liczb? :P Co mają znaczyć te działania w nawiasie? :D

Matematyk0
komentarz
komentarz

Nie używaj couta tylko printfa, cout jest dużo dużo wolniejszy.

 

cout jest łatwiejszy do ogarnięcia niż printf ;)

 

co to za dziwny sposób losowania liczb? :P Co mają znaczyć te działania w nawiasie? :D

 

Sposób liczenia ile tych liczb ma wylosować - 9 na minusie, 9 na plusie i zero - po co od razu 19, palców brakuje do policzenia :D

Xainty
komentarz
komentarz (edytowane)

cout jest łatwiejszy do ogarnięcia niż printf ;)

Ale jest "nieelegancki", wolniej sie wykonuje przez co program jest mniej optymalny, po co się uczyć od początku złych nawyków? :P Printf nie jest wcale jakiś skomplikowany.

 

 

Sposób liczenia ile tych liczb ma wylosować - 9 na minusie, 9 na plusie i zero - po co od razu 19, palców brakuje do policzenia  :D

 

Dziwne podejście :P

 

wylosowana_liczba = (rand() % ile_liczb_w_przedziale ) + startowa_liczba;

Matematyk0
komentarz
komentarz

Zawsze można używać puts/putc, co jest jeszcze szybsze ;p

elastyna
komentarz
komentarz

Co do samego losowania, to tak mnie uczyli w szkole pisać :P

Matematyk0
komentarz
komentarz

Mnie uczyli, że jak nie wiesz jak policzyć - dodawaj tak jak tu, funkcja i tak zadziała ;)

Wciąż szukasz rozwiązania problemu? Napisz teraz na forum!

Możesz zadać pytanie bez konieczności rejestracji - wystarczy, że wypełnisz formularz.

×
×
  • Dodaj nową pozycję...

Powiadomienie o plikach cookie

Strona wykorzystuje pliki cookies w celu prawidłowego świadczenia usług i wygody użytkowników. Warunki przechowywania i dostępu do plików cookies możesz zmienić w ustawieniach przeglądarki.