Jump to content

Recommended Posts

Daca tot a inceput frenezia potului mare, ar fi interesant de vazut ce inseamna 6/49 pentru a-i face pe oameni sa realizeze sansele de castig.

Scrieti un cod in C sau PHP care simuleaza intregul joc 6/49.

Prima oara generati 6 numere random cu valori cuprinse intre 1 si 49, acestea reprezentand extragerea.

Generati un numar N de "bilete" cu numere random si comparati-le cu biletul castigator.

Afisati numarul de bilete castigatoare care au nimerit 3,4,5,6 numere. (Doar numarul lor, nu si biletele).

Atentie!

Nu conteaza ordinea.

Daca numerele extrase sunt 2,3,7,9,12,4 ; biletul 3,2,9,12,7,4 este considerat castigator.

Si, in mod evident, nu generati bilete care continin acelasi numar de mai multe ori. Ex: 3,3,4,2,7,3.

Reprezentarea rezultatelor ar putea fi ceva de genul:

Numar de bilete generate: N

Numar de bilete cu 3 nr. castigatoare: (numarul)

Numar de bilete cu 4 nr. castigatoare: (numarul)

Numar de bilete cu 5 nr. castigatoare: (numarul)

Numar de bilete cu 6 nr. castigatoare: (numarul)

Numerele extrase: 4, 19, 21, 32 , 1, 7

Biletele cu 6 nr. castigatoare: 19, 32, 1, 4, 21, 7 ; 7, 19, 32, 1, 4, 21 .....

Edited by crs12decoder
Link to comment
Share on other sites

Test pentru 20 de milioane de bilete:

test_20mil.png

test_20mil.png



#include <iostream>
#include <stdlib.h>
using namespace std;

int castigator[6],castiguri[7],matrice[720][6],linie=0;
long long RANDOM_USE;

void inregistrare_castigator(int v[6])
{
for(int i=0;i<6;i++)matrice[linie][i]=v[i];
linie ++;
}

int check_valid(int v[6], int x, int n)
{
for(int i=0;i<n;i++)
if (v[i]==x || x==0)return 0;

return 1;
}

void generare(int v[6])
{
int i=0,x;
srand(RANDOM_USE);
RANDOM_USE++;
do
{
x = rand()%50;
if(x!=0 && check_valid(v,x,i)){v[i]=x; i++;}
}while(i<6);
}

int check_castig (int v[6])
{
int nr = 0;
for(int i=0;i<6;i++)
for(int j=0;j<6;j++)if(castigator[i] == v[j]){nr++; j=6;}
castiguri[nr-1]++;
if(nr==6)inregistrare_castigator(v);

}

void afisare(int v[6])
{
for(int i=0;i<6;i++)cout<<" "<<v[i]<<" ";
cout<<"\n";
}

int main()
{
int i=0,j,x,v[6];
long long n;
srand(time(NULL));
RANDOM_USE = rand()%20;

generare(castigator);

srand(RANDOM_USE);
RANDOM_USE++;
cout<<"Numarul de bilete jucate: "; cin>>n;
for(i=0;i<n;i++)
{
generare(v); //afisare(v); cout<<endl;
check_castig(v);
}

cout<<"Numar de bilete cu 3 nr. castigatoare: "<<castiguri[2]<<"\n";
cout<<"Numar de bilete cu 4 nr. castigatoare: "<<castiguri[3]<<"\n";
cout<<"Numar de bilete cu 5 nr. castigatoare: "<<castiguri[4]<<"\n";
cout<<"Numar de bilete cu 6 nr. castigatoare: "<<castiguri[5]<<"\n";

cout<<"Numere extrase: "; afisare(castigator); cout<<"\n";

if(linie!=0)
{
cout<<"Biletele cu 6 nr. castigatoare:\n";
for(i=0;i<linie;i++)
{
for(j=0;j<6;j++)cout<<matrice[i][j]<<" ";
cout<<"\n";
}
}
return 0;
}


Mersi pentru challange! :D

Edited by passfig
Link to comment
Share on other sites

#!/usr/bin/env python2

import random

def longest_common_subset(s1, s2):
m = [[0] * (1 + len(s2)) for i in xrange(1 + len(s1))]
longest, x_longest = 0, 0
for x in xrange(1, 1 + len(s1)):
for y in xrange(1, 1 + len(s2)):
if s1[x - 1] == s2[y - 1]:
m[x][y] = m[x - 1][y - 1] + 1
if m[x][y] > longest:
longest = m[x][y]
x_longest = x
else:
m[x][y] = 0
return s1[x_longest - longest: x_longest]

number_of_sold_tickets = random.randint(10, 10000000)
print "Sold", number_of_sold_tickets, "tickets..."

valid_numbers = range(1, 50) # alternative [x+1 for x in range(0, 49)]
current_drown_numbers = sorted(random.sample(valid_numbers, 6))
print "Numbers drown:", current_drown_numbers


sold_tickets = {}
print "Preparing sold tickets...",
for i in range(0, number_of_sold_tickets):
sold_tickets[i] = sorted(random.sample(valid_numbers, 6))
print "Done"

winners = {}


print "Searching for winners...",
for i in sold_tickets:
m = longest_common_subset(sold_tickets[i], valid_numbers)
l = len(m)
if l not in winners:
winners[l] = 0
winners[l] += 1
print "Done"

for l in winners:
print winners[l], "people guessed", l, "numbers."

Cu mentiunea ca longest_common_subset, nu e original a mea.

Link to comment
Share on other sites

#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
int nr_c[6], bil_c[7], bilet[6], n, nr, k;
bool Exista(int a[], int x) {
for (int i = 0; i < 6; i++)
if (a[i] == x)
return true;
return false;
}
void Bilet_Nou(int a[], int b[]) {
for (int i = 0; i < 6; i++) {
nr = rand() % 50;
if (Exista(a, nr))
i--;
else {
a[i] = nr;
if (Exista(b, nr))
k++;
}
}
}
int main(void) {
cout << "n = ", cin >> n;
srand((unsigned int)time(NULL));
Bilet_Nou(nr_c, nr_c);
for (int i = 0; i < n; i++) {
for (int i = 0; i < 6; i++)
bilet[i] = 0;
k = 0;
Bilet_Nou(bilet, nr_c);
bil_c[k]++;
}
for (int i = 3; i < 7; i++)
cout << "Bilete cu " << i << " nr. norocoase: " << bil_c[i] << endl;
return 0;
}

Edited by H3xoR
Link to comment
Share on other sites

Versiunea simpla:


<?php
$jucate = (int)$_GET['jucate'];
$castigatoare = genereaza();
for ($i=1; $i <= $jucate; $i++) {
$bilete[$i] = genereaza();
$diff = array_diff($castigatoare, $bilete[$i]);
for ($w=3; $w <= 6; $w++) {
if( count($diff) == (6-$w) ) $win[$w][] = $bilete[$i];
}
}

echo 'Bilete totale: <b>'.number_format($jucate,0,'.','.').'</b><br/>';
echo 'Numere extrase: <b>'.implode($castigatoare,' ').'</b><br/><br/>';
for ($i=3; $i <= 6; $i++) {
echo 'Numar de bilete cu '.$i.' nr castigatoare: <b>'.number_format(count($win[$i]),0,'.','.').'</b><br/>';
}

function genereaza(){
while (count($nr) != 6) {
$nr[] = rand(1,49);
$nr = array_unique($nr);
}
return $nr;
}
?>

Si cu afisarea celor 6 numere castigatoare:

<?php
ini_set('memory_limit', '-1');
ini_set('max_execution_time', '-1');

$jucate = (int)$_GET['jucate'];
$castigatoare = genereaza();
for ($i=1; $i <= $jucate; $i++) {
$bilete[$i] = genereaza();
$diff = array_diff($castigatoare, $bilete[$i]);
for ($w=3; $w <= 6; $w++) {
if( count($diff) == (6-$w) ) $win[$w][] = $bilete[$i];
}
}
echo 'Bilete totale: <b>'.number_format($jucate,0,'.','.').'</b><br/>';
echo 'Numere extrase: <b>'.implode($castigatoare,' ').'</b><br/>';
for ($i=3; $i <= 6; $i++) {
echo 'Numar de bilete cu '.$i.' nr castigatoare: <b>'.number_format(count($win[$i]),0,'.','.').'</b><br/>';
if($i==6 && count($win[$i]) > 0){
echo 'Bilete cu 6 numere castigatoare: <br><div style="margin-left:20px;">';
foreach ($win[$i] as $k => $v) {
echo implode($win[$i][$k],' ').'<br/>';
}
echo '</div>';
}

}

function genereaza(){
while (count($nr) != 6) {
$nr[] = rand(1,49);
$nr = array_unique($nr);
}
return $nr;
}
?>

d7p.png

Link to comment
Share on other sites

Daca tot a inceput frenezia potului mare, ar fi interesant de vazut ce inseamna 6/49 pentru a-i face pe oameni sa realizeze sansele de castig.

Scrieti un cod in C sau PHP care simuleaza intregul joc 6/49.

Prima oara generati 6 numere random cu valori cuprinse intre 1 si 49, acestea reprezentand extragerea.

Generati un numar N de "bilete" cu numere random si comparati-le cu biletul castigator.

Afisati numarul de bilete castigatoare care au nimerit 3,4,5,6 numere. (Doar numarul lor, nu si biletele).

Atentie!

Nu conteaza ordinea.

Daca numerele extrase sunt 2,3,7,9,12,4 ; biletul 3,2,9,12,7,4 este considerat castigator.

Si, in mod evident, nu generati bilete care continin acelasi numar de mai multe ori. Ex: 3,3,4,2,7,3.

Reprezentarea rezultatelor ar putea fi ceva de genul:

Numar de bilete generate: N

Numar de bilete cu 3 nr. castigatoare: (numarul)

Numar de bilete cu 4 nr. castigatoare: (numarul)

Numar de bilete cu 5 nr. castigatoare: (numarul)

Numar de bilete cu 6 nr. castigatoare: (numarul)

Numerele extrase: 4, 19, 21, 32 , 1, 7

Biletele cu 6 nr. castigatoare: 19, 32, 1, 4, 21, 7 ; 7, 19, 32, 1, 4, 21 .....

O faza tare:

Vrei sa vezi daca ar exista totusi o metoda de a juca cat mai eficient la loto dar in acelasi timp, pe o caldura ca asta, mai bine te duci si stai la o terasa sau altundeva cu burta la soare ?

Nimic mai simplu, deschizi un topic asa ca asta sub forma de "competitie" si astepti sa vina unu intr-o zi si sa iti zica:

Variante generate 10.

Variante cu 6 numere: 1.

Variante cu 5 numere: 8.

Variante cu 4 numere: 1.

Eficient, nu ?

Si nici nu a trebuit sa faci ceva ptr. asta ! :))

Link to comment
Share on other sites

O faza tare:

Vrei sa vezi daca ar exista totusi o metoda de a juca cat mai eficient la loto dar in acelasi timp, pe o caldura ca asta, mai bine te duci si stai la o terasa sau altundeva cu burta la soare ?

Nimic mai simplu, deschizi un topic asa ca asta sub forma de "competitie" si astepti sa vina unu intr-o zi si sa iti zica:

Variante generate 10.

Variante cu 6 numere: 1.

Variante cu 5 numere: 8.

Variante cu 4 numere: 1.

Eficient, nu ?

Si nici nu a trebuit sa faci ceva ptr. asta ! :))

Bai Guta, cum era aia: "Iei bacu' nu iei bacu' semintele acelasi gust are, nu?"

Sugestie: ramai la terasa ta, sparge seminte, bea bere, eventual poti sa si eructezi DAR lasa-ne pe noi in pace.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



×
×
  • Create New...