• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Ponowne ,,losowanie'' liczby

0 głosów
389 wizyt
pytanie zadane 19 maja 2015 w C i C++ przez serabio Nowicjusz (180 p.)
Witam mam problem z losowaniem liczby .

Potrzebuje 6 losowych liczb ktore sie nie powtarzaja z zakresu 1-50 (jak w duzym lotku)

Probowalem w ten sposob

liczbawylosowana1=rand()%50+1;
    for(;;)
    {liczbawylosowana2=rand()%50+1;
    if(liczbawylosowana2=liczbawylosowana1)
        continue;
        else
        break;

Jak sprawic by program ponownie wylosowal liczbe (ktora bedzie inna niz poprzednie)

6 odpowiedzi

0 głosów
odpowiedź 19 maja 2015 przez Ehlert VIP (105,350 p.)
Zrób tablicę. uzupełnij ją indeksami. Losuj liczbę. Tą którą wylosowałeś przepisuj a w tablicy dajesz np -1. W późniejszych losowaniach -1 omijasz.
komentarz 19 maja 2015 przez serabio Nowicjusz (180 p.)
tablic jeszcze nie przerabialem, da sie jakos inaczej ?:D
komentarz 19 maja 2015 przez Ehlert VIP (105,350 p.)
6 liczb do wylosowania bez tablic? Sado maso :D przerób tablice, poźniej bierz się za algorytm losowania bez powtórzeń.
komentarz 19 maja 2015 przez Abizaas Gaduła (4,620 p.)
A do tablicy nie może dostać się inna taka sama liczba? Nie rozumiem twojego pomysłu.
komentarz 19 maja 2015 przez Ehlert VIP (105,350 p.)

Tworzysz funkcję i tablicę.

tab[0] = 0;
tab[1] = 1;
//...
tab[50] = 50;

Do funkcji wchodzi ta tablica(w zasadzie wskaźnik na nią) i jej rozmiar. W jej ciele losujesz indeks.

if(tab[rand] != -1/*Lub inna wartość którą przyjmiesz za "wadliwą"*/)
         return tab[rand];
else
        //losuj dalej.

 

0 głosów
odpowiedź 19 maja 2015 przez Szahid Pasjonat (15,700 p.)
Robienie tego bez tablicy jest kodożerne. Jednak jeśli liczb jest tylko sześć to możesz zrobić miejsca na te liczby ,, z palca".
0 głosów
odpowiedź 19 maja 2015 przez Bartek85 Mądrala (7,120 p.)
#include <iostream>
#include <cstdlib>
#include <cstring>
#include <ctime>
using namespace std;

int main() {
 
	const unsigned short tabSize = 6;
	const unsigned short minValue = 0;
	const unsigned short maxValue = 50;
	short doneNumber = 0;
	unsigned short tab[tabSize];
	memset(tab, 0, tabSize*sizeof(unsigned short));	
	srand(time(NULL));

	while(doneNumber < tabSize)
	{
		bool isExist = false;
		short tmp = minValue + rand()%(maxValue + 1);		
		for(int i=0; i < tabSize; ++i)
		{
			if(tab[i] == tmp)
			{
				isExist = true;
				break;
			}
		}		
		if(!isExist)
			tab[doneNumber++] = tmp;		
	}

	for(int i = 0; i < tabSize; ++i)	
		cout << "i=" <<  tab[i] << endl;

	getchar();
	return 0;
}

Proszę.

0 głosów
odpowiedź 19 maja 2015 przez Emil Kob Użytkownik (780 p.)
#include <ctime.h>
#include <iostream.h>
#include <cstdlib.h>

int main()
{
        int a, b, c, d, e, f, x;
        a=b=c=d=e=f=x=51;
        cout<< "Losujemy 6 liczb od 0 do 50\n";
        srand(time(NULL));
        for (int i=0 ; i<6 ; i++)
        {
                do
                {
                        x=rand()%51;
                }
                while (x==a || x==b || x==c || x==d || x==e || x==f);
                if (i==0) a=x;
                if (i==1) b=x;
                if (i==2) c=x;
                if (i==3) d=x;
                if (i==4) e=x;
                if (i==5) f=x;
                cout<< x<< "\n" ;

        }
        getchar();
        return 0;
}

Myślę, że taki kod po analizie zroumiesz.

0 głosów
odpowiedź 19 maja 2015 przez skav3n Gaduła (3,540 p.)

W pythonie napisałbym coś takiego:

import random
lista = list(range(1, 51))
random.shuffle(lista)
print(lista[:6])

 Możesz zrobić podobnie, czyli:

1. Tworzysz listę 50 elementów,

2. Używasz metody która tasuje elementy wewnątrz listy,

3. Drukujesz 6 pierwszych elementów.

:)

0 głosów
odpowiedź 20 maja 2015 przez Adam Początkujący (260 p.)
edycja 20 maja 2015 przez Adam
#include <windows.h>// Sleep() , exit(0) , system ("cls")

Uzyj tej biblioteki bo ma funkcje Sleep()

 

srand(time(NULL)); // pobieram ilosc sekund od 1 stycznia 1970r, od polnocy.
    //system("cls");

    for(int r=0; r<5; ++r) {
        system("cls");
        int    liczba_ms = (rand()%500+1)-500;//czas opoznienia do funkcji Sleep()
        liczba = ((rand()%50)+1);// liczby od 1 do 50
        ::tab1[r] = liczba;
        ::suma +=liczba;
        cout<<endl<<"Wygenerowano " <<r+1<<" liczbe.";
        Sleep(500+liczba_ms);
    }

Adaptuj powyższy kod z funkcjąSleep()

Podobne pytania

0 głosów
2 odpowiedzi 88 wizyt
pytanie zadane 3 listopada 2016 w C i C++ przez jelonek2006 Początkujący (410 p.)
+1 głos
3 odpowiedzi 121 wizyt
pytanie zadane 30 kwietnia 2015 w C i C++ przez M4tthew Gaduła (4,460 p.)
0 głosów
3 odpowiedzi 103 wizyt
pytanie zadane 17 maja 2015 w PHP, Symfony, Zend przez SebastianGomularz Dyskutant (9,530 p.)
Obowiązuje już zaktualizowany regulamin.

Czy wiesz, że nie musisz już odświeżać strony głównej?

Lista pytań i odpowiedzi aktualizuje się automatycznie!

38,633 zapytań

76,521 odpowiedzi

149,466 komentarzy

18,084 pasjonatów

Przeglądających: 252
Pasjonatów: 19 Gości: 233

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...