Kezdőoldal » Számítástechnika » Programozás » C++ ötöslottó készítés?

C++ ötöslottó készítés?

Figyelt kérdés

5-ös lottót kell készítenem, 1-90 ig generálja le a véletlen számokat, összehasonlítja a beírt számokkal, és elmenti egy tömb-ben, amit a végén ki irat.


Hogy tudnám megcsinálni, hogy ne generáljon 2 ugyanolyan számot (tehát az összes szám különböző legyen a tömb-ben)?


Eddig idáig jutottam:

#include <iostream>

#include <stdlib.h>

#include <time.h>

using namespace std;

int main()

{

int N=5;

int vel,tipp;

int tomb[N];


srand(time(0));



for (int i=0; i<N; i++)

{


vel=rand()%90+1;

tomb[i]=vel;

cout<<"Kerem az "<<i+1<<" szamot: ";

cin>>tipp;


if (tipp==vel)

{

cout<<"Talalt!"<<endl;

}

else

{

cout<<"Nem talalt!"<<endl;

}



}


for (int i=0; i<N; i++)

{

cout<<tomb[i]<<" ";

}

return 0;

}


2015. szept. 27. 10:49
1 2
 1/13 anonim ***** válasza:
61%
Hasznalj egy 90 elemű tömbböt, amiben a számok 1-től 90-ig vannak (egy ciklussal feltöltöd). Utána megycseréled a 0-dik elemet egy 0 és 89 közötti véletlen indexű elemmel, majd az első elemet 1 és 89 közötti véletlen indexű elemmel. A végén az első öt elem a tömbben a kisorsolt nyerőszám.
2015. szept. 27. 10:58
Hasznos számodra ez a válasz?
 2/13 anonim ***** válasza:
27%
Az 1. Megoldás elég pancser
2015. szept. 27. 11:21
Hasznos számodra ez a válasz?
 3/13 anonim ***** válasza:

vektorral pl. valahogy így:


#include <iostream>

#include <vector>

#include <cstdlib>

#include <ctime>


using namespace std;


#define N 5


int main() {

vector<int> huzottak, tippek;

int aktualis, talalatok = 0;


srand(static_cast<unsigned int>(time(NULL)));


while (huzottak.size() < N) {

if (find(huzottak.begin(), huzottak.end(), (aktualis = (rand() % 90 + 1))) == huzottak.end()) {

huzottak.push_back(aktualis);

}

}


for (int i = 0; i < N; ++i) {

cout << "Kerem a(z) " << i + 1 << ". szamot: ";

while (!(std::cin >> aktualis) || (find(tippek.begin(), tippek.end(), aktualis) != tippek.end()) || (1 > aktualis) || (aktualis > 90)) {

std::cout << "Hibas input, kerem a(z) " << i + 1 << ". szamot ujra: ";

std::cin.clear();

std::cin.ignore(INT_MAX, '\n');

}

tippek.push_back(aktualis);

}


cout << endl << "Huzott szamok:" << endl;

for (auto it = huzottak.begin(); it != huzottak.end(); ++it) {

cout << ((it == huzottak.begin()) ? "" : ", ") << *it;

}


cout << endl << endl << "Tippelt szamok:" << endl;

for (auto it = tippek.begin(); it != tippek.end(); ++it) {

cout << ((it == tippek.begin()) ? "" : ", ") << *it;

if (find(huzottak.begin(), huzottak.end(), *it) != huzottak.end()) {

++talalatok;

}

}


cout << endl << endl << "Talalatok szama: " << talalatok << endl;

return 0;

}

2015. szept. 27. 12:29
Hasznos számodra ez a válasz?
 4/13 anonim ***** válasza:
Erre elég sok megoldás lehet. A legjobb nyilván halmazzal lehetséges, hiszen abban nem ismétlődhetnek az elemek. Kevésbé hatékony tömbbel, hogy addig generálsz számot, amíg az nem különbözik az őt megelőző számoktól és el nem éri a számuk az ötöt.
2015. szept. 27. 12:51
Hasznos számodra ez a válasz?
 5/13 anonim ***** válasza:
Még mindig az első válasz megoldása a leghatékonyabb.
2015. szept. 27. 12:56
Hasznos számodra ez a válasz?
 6/13 SimkoL ***** válasza:

Kezdetnek én a logikai típusú tömböt ajánlanám. Nagyon sokféle megközelítése lehet a megoldásnak saját függvény, halmaz de akár pár if-fel is megoldható mivel nem sok számról van szó. Az ilyen feladatokkal az a gond, hogy nem lehet tudni, hogy hol is járnak a tananyagban.


#include <cstdlib>

#include <iostream>

#include <time.h>


using namespace std;


int main(){

  srand(time(0));  

  //létrehozunk egy 91 elemű - a nulladik elemet  a kutyáknak dobjuk - 

  //logikai tipusú tömböt

  bool szamok[91]; 

  int kezd = 0, szam;

  //a tömb minden elemét hamisra állítjuk

  //for (int i=0; i <= 91; i++) szamok[i] = false --> a memset-tel közvetlenül feltöltjük

  //a szamok tömböt

  memset(szamok, false, 91);

  while (kezd < 5){

    szam = rand() % 90 + 1; 

    //ha már a szám ki volt sorsolva - true - akkor újat generálunk

    while (szamok[szam] == true) szam = rand() % 90 + 1;      

    szamok[szam] = true;

    kezd++;

  }          

  for (int i=1; i < 91; i++) if (szamok[i]) cout << i << " ";

  system("PAUSE");

  return 0;

}

2015. szept. 27. 14:35
Hasznos számodra ez a válasz?
 7/13 SimkoL ***** válasza:

Az előző szétesett, nem tudom ez, hogy fog mutatni

#include <cstdlib>

#include <iostream>

#include <time.h>


using namespace std;


int main(){

  srand(time(0));  

  //létrehozunk egy 91 elemű - a nulladik elemet  a kutyáknak dobjuk - 

  //logikai tipusú tömböt

  bool szamok[91]; 

  int kezd = 0, szam;

  //a tömb minden elemét hamisra állítjuk

  //for (int i=0; i <= 91; i++) szamok[i] = false --> a memset-tel közvetlenül feltöltjük

  //a szamok tömböt

  memset(szamok, false, 91);

  while (kezd < 5){

    szam = rand() % 90 + 1; 

    //ha már a szám ki volt sorsolva - true - akkor újat generálunk

    while (szamok[szam] == true) szam = rand() % 90 + 1;      

    szamok[szam] = true;

    kezd++;

  }          

  for (int i=1; i < 91; i++) if (szamok[i]) cout << i << " ";

  system("PAUSE");

  return 0;

}

2015. szept. 27. 14:37
Hasznos számodra ez a válasz?
 8/13 anonim ***** válasza:

memset C++ -ban, komolyan? Helyesen: bool szamok[91]{};

A rand() függvény pedig már elavultnak számít: [link]

2015. szept. 27. 15:10
Hasznos számodra ez a válasz?
 9/13 SimkoL ***** válasza:
Nem arról szól, hogy te milyen 'zseni' vagy hanem a nagyon alapokat kell elmondani. Pár dolgot megtanulnak az elején, abból kell gazdálkodni.
2015. szept. 27. 15:54
Hasznos számodra ez a válasz?
 10/13 anonim ***** válasza:
Az alapokat kell a legjobban tanítani, mert arra építkezik az ember. Aki kicsit is jártasabb a nyelvben a memsetes megoldásodnál kihajítja a monitort az ablakon.
2015. szept. 27. 15:58
Hasznos számodra ez a válasz?
1 2

Kapcsolódó kérdések:





Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!