Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[KONKURS] lotto bez tablic

Ostatnio zmodyfikowano 2008-11-29 11:55
Autor Wiadomość
Patzick
» 2008-11-16 13:52:10
Ja wykombinowałem coś takiego, może nie zrobiłem tego w jednej pętli ale chyba aż tak źle nie jest :P
powodzenia innym xD

C/C++
#include <iostream>
#include <conio.h>
#include <ctime>
using namespace std;

int jeden = 0;
int dwa = 0;
int trzy = 0;
int cztery = 0;
int piec = 0;
int szesc = 0;
int liczba, liczba_teraz;
int spr = 0;

int random( int nMin, int nMax ) { return rand() % nMax + nMin; }

void losowanie()
{
    liczba = random( 1, 49 );
    if( jeden == liczba || dwa == liczba || trzy == liczba || cztery == liczba || piec == liczba || szesc == liczba ) {
        spr = 1;
    }
    else {
        spr = 0;
    }
};

void sprawdzanie() {
    if( spr == 1 ) {
        while( spr == 1 ) {
            losowanie();
            liczba_teraz = liczba;
        };
    }
    else {
        liczba_teraz = liczba;
    };
};

main() {
   
    srand( static_cast < int >( time( NULL ) ) );
   
    cout << "++++++++++++++++++++\n LOTTO bez tablic\n--------------------\nby Patzick\n";
   
    losowanie();
    sprawdzanie();
    jeden = liczba_teraz;
    losowanie();
    sprawdzanie();
    dwa = liczba_teraz;
    losowanie();
    sprawdzanie();
    trzy = liczba_teraz;
    losowanie();
    sprawdzanie();
    cztery = liczba_teraz;
    losowanie();
    sprawdzanie();
    piec = liczba_teraz;
    losowanie();
    sprawdzanie();
    szesc = liczba_teraz;
   
   
    cout << "\n\nWyniki losowania:\n " << jeden << "," << dwa << "," << trzy << "," << cztery << "," << piec << "," << szesc;
   
    getch();
   
}
P-2547
DejaVu
» 2008-11-16 14:06:29
Na moje oko poniższy warunek jest niepoprawny:
if(( jeden || dwa || trzy || cztery || piec || szesc ) == liczba )
P-2548
Patzick
» 2008-11-16 14:34:15
Zmieniłem warunek na

C/C++
if( jeden == liczba || dwa == liczba || trzy == liczba || cztery == liczba || piec == liczba || szesc == liczba )

mam nadzieję, że teraz wszystko dobrze :)
P-2549
Patzick
» 2008-11-16 15:23:42
cóż, po kilku próbach dla upewnienia się czy Twój kod działa wyskoczyła mi taka kombinacja cyfr

49 8 41 45 44 8

więc niestety wynik się powtarza.
P-2550
Patzick
» 2008-11-16 17:19:23
więc mam pomysł, dorzućmy do tego kod, który obliczy szybkość działania samego algorytmu losowania. Czyli tak włączasz program, on czeka na Twoją reakcję (getch)po czym losuje te liczby mierząc czas losowania i podaje go na końcu po wyświetleniu wyników losowania :)
zaraz pomodzę coś takiego i od razu postaram się przyspieszyć mój kod :P
P-2551
Patzick
» 2008-11-16 19:01:12
szukam jakiegoś dobrego algorytmu na zliczenie tego ale nie mogę znaleźć ;/
najlepsze co mogę znaleźć to liczy tylko sekundy, a to jest strasznie niedokładny wynik nawet dla 100 czy 1000 powtórzeń. Jakieś pomysły?

//EDIT
znalazłem rozwiązanie, przy wklejeniu kodu zobaczycie je, tylko ten czas nie zawsze jest taki sam, i w sumie nie będzie bo to zależy od szybkości komputera, która też nie jest taka sama cały czas bo komp może być np czymś obciążony, ale mniejwięcej można coś wyliczyć :)

//EDIT 2

Więc mam różnice czasów średnio na 1 obliczenie
Twoje wyniki to ok 2.9 milisekundy
moje ok 5.8 milisekundy
także sromotna porażka mojego algorytmu :P ale jak na ograniczenia to i tak nie jest źle ;)

a przydatny program do odczytywania czasu systemowego poniżej

C/C++
#include <Windows.h>
#include <stdio.h>

main()
{
    SYSTEMTIME st;
    GetSystemTime( & st );
    printf( " Hour:%d\n Min:%d\n Second:% d\n Milisekund:%d\n", st.wHour, st.wMinute, st.wSecond, st.wMilliseconds );
}
P-2552
Patzick
» 2008-11-16 20:38:13
wynik wynosi idealnie 2.03 milisekundy na operację, nie jest tak szybkie jak się spodziewałem (myślałem, że koło 1.8 będzie) ale za to stabilne- w 98% prób wynosi 2.03 :) mamy więc punkt odniesienia zarówno pod względem średniego czasu jak i stabilności kodu :)
P-2553
manfred
Temat założony przez niniejszego użytkownika
[KONKURS] lotto bez tablic
» 2008-11-16 09:10:06
Hehehe. Mam pomysł na ciekawy konkurs. Chodzi w nim o to, żeby napisać lotto bez tablic, czyli program musi losować 6 liczb z przedziału 1..49 nie powtarzających się, a następnie je wypisać. To wszystko bez używania tablic.
Zasady : napisać najkrótszy i najszybszy (najmniej pętli z najsłabszym losowym warunkiem zakończenia) algorytm, który wylosuje 6 z 49 bez powtórzeń i bez użycia tablic. założenie jest takie, że rand()%n <> 0 może trwać i milion iteracji (oczywiście czysto teoretycznie), nie mówiąc już o (rand()%n <> 0) and (rand()%n <> 0) and ... Oczywiście wyniki muszą być całkowicie losowe, więc nie bawimy się w rand()%7, 7+rand()%7,14+rand()%7 itp.
Ja już swój program mam gotowy, ale używa on tylko jedną pętlę, więc nie chcę wam psuć zabawy. Rozwiązania proszę wrzucać w tym topicu.
P-18628
« 1 » 2
  Strona 1 z 2 Następna strona