Losowanie dziesięciu liczb bez powtórzeń

Odpowiedz Nowy wątek
2014-12-15 22:03
Zimny Mleczarz
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");
}
 

Pozostało 580 znaków

2014-12-15 22:07
0

http://4programmers.net/Forum/Newbie/167222-wykluczenie_powtorzen_liczb_w_programie_losujacym


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.

Pozostało 580 znaków

2014-12-15 23:12
Zimny Mleczarz
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;
 
}
 

Pozostało 580 znaków

2014-12-15 23:37
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;
}

2. Jedyny sensowny w tym przypadku wariant opisany pod linkiem: 
```cpp
#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;
}


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
edytowany 1x, ostatnio: _13th_Dragon, 2014-12-15 23:38

Pozostało 580 znaków

2014-12-15 23:41
Zimny Mleczarz
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.

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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