C++ ötöslottó készíté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;
}
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;
}
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;
}
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;
}
memset C++ -ban, komolyan? Helyesen: bool szamok[91]{};
A rand() függvény pedig már elavultnak számít: [link]
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
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!