Losowanie dziesięciu liczb bez powtórzeń

0

Witam, mam problem z programem, który ma losować 10 liczb bez powtórzeń. Dużo zmieniałem i myślałem, lecz nic nie wymyśliłem. Jeśli ktoś będzie w stanie mi pomóc to będę wdzięczny.

#include <iostream>
#include <ctime>
#include <cstdlib>
using namespace std;

int losowanie()
{
	int liczba = rand() % 10 + 1;
	return liczba;
}

bool sprawdzenie(int r, int liczba[])
{
	for (int b = 0; b < r; r++)
	{
		if (liczba[b] == r)
		{
			cout << "false" << endl;
			return false;
		}
		else
		{
			cout << "true" << endl;
			return true;
		}
	}
}

int main()
{
	srand(time(NULL));
	int x = 0;
	int liczba[10];
	int wylosowanych = 0;
	for (wylosowanych = 0; wylosowanych < 10; x++)
	{
		liczba[wylosowanych] = losowanie();
		if (sprawdzenie(wylosowanych, liczba) == 0	)
		{
			cout << liczba[wylosowanych] << " ";
			wylosowanych++;
		}
		
	} 

	cout << endl;
	system("pause");
}

 
0

Niestety nadal mam problem. Aktualnie mój kod wygląda następująco:

#include <iostream>
#include <ctime>
#include <cstdlib>
using namespace std;



bool sprawdzenie(int &wylosowanych, int liczba, int tab[])
{
	for (int a = 0; a < wylosowanych; a++)
	{
		if (tab[a] == liczba)
		{
			return false;
		}
		else
		{
			return true;
		}
	}
}

int losowanie()
{
	return rand() % 10 + 1;
}

int main()
{
	srand(time(NULL));
	int x = 0;
	int liczba[10];
	int wylosowanych = 0;
	for (wylosowanych = 0; wylosowanych < 10; wylosowanych++)
	{
		do
		{
			liczba[wylosowanych] = losowanie();
		} 
		while (sprawdzenie(wylosowanych, liczba[wylosowanych], liczba) == 0);

		cout << liczba[wylosowanych]<<" ";

	} 

	cout << endl;
	
}
 
1
  1. Wariant bezsensowny który bezmyślnie dłubiesz zamiast przeczytać link który podałem:
#include <iostream>
#include <ctime>
#include <cstdlib>
using namespace std;

bool sprawdzenie(int wylosowanych,int liczba,int tab[])
  {
   for(int i=0;i<wylosowanych;++i) if(tab[i]==liczba) return false;
   return true;
  }

int losowanie()
  {
   return rand() % 10 + 1;
  }

int main()
  {
   srand(time(0));
   int tab[10],wylosowanych=0;
   while(wylosowanych<10) if(sprawdzenie(wylosowanych,tab[wylosowanych]=losowanie(),tab)) ++wylosowanych;
   for(int i=0;i<wylosowanych;++i) cout<<tab[i]<<' ';
   return 0;
  }
  1. Jedyny sensowny w tym przypadku wariant opisany pod linkiem:
#include <algorithm>
#include <iostream>
#include <ctime>
#include <cstdlib>
using namespace std;

int main()
  {
   srand(time(0));
   int tab[10];
   for(int i=0;i<10;++i) tab[i]=i+1;
   for(int i=10;i>1;--i) swap(tab[i-1],tab[rand()%i]);
   for(int i=0;i<10;++i) cout<<tab[i]<<' ';
   return 0;
  }
  1. Ten sam sensowny wariant też opisany pod linkiem:
#include <algorithm>
#include <iostream>
using namespace std;

int main()
  {
   int tab[10];
   for(int i=0;i<10;++i) tab[i]=i+1;
   shuffle(tab,tab+10);
   for(int i=0;i<10;++i) cout<<tab[i]<<' ';
   return 0;
  }
0

Dzięki wielkie. Wydaje mi się, że edytowałeś swój komentarz, więc dlatego nie wszedłem na link, a jeśli nie zmieniałeś to coś mi się pomyliło z innym tematem. W każdym razie dzięki.

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