Czy jest możliwość napisania kodu który umożliwi wyszukanie duplikatów w notatniku?
Mam generator liczb losowych który wysyła losowe liczby do notatnika.. szansa jest że cyfry będą takie same. Jest jakiś program bądź kod który to "prześwietli" i sprawdzi czy owych duplikatów nie ma?
No ale co? Chcesz sprawdzić czy wśród N
liczb losowych nie powtarzają się cyfry? Przecież to jest bez sensu albo jest to problem XY.
szansa jest że cyfry będą takie same
Pytanie czy wiesz czym cyfra różni się od liczby, bo jeśli chcesz losować liczby bez powtórzeń to co innego.
Instrukcja if
zrobi to czego oczekujesz.
grzesiek51114 napisał(a):
No ale co? Chcesz sprawdzić czy wśród
N
liczb losowych nie powtarzają się cyfry? Przecież to jest bez sensu albo jest to problem XY.szansa jest że cyfry będą takie same
Pytanie czy wiesz czym cyfra różni się od liczby, bo jeśli chcesz losować liczby bez powtórzeń to co innego.
Generator robi losowe liczby i szansa jest że będą takie same. Gdy taki generator zrobi 2k takich liczb to jest problem żeby znaleźć duplikat.
No to losuj bez powtórzeń.
grzesiek51114 napisał(a):
No to losuj bez powtórzeń.
To mi prześlij taki generator który będzie robić liczby z przedziałem min. i max. oraz nie będzie robić powtórzeń.
Ogólnie dostałem taki kod ale nie mam pojęcia na jakiej zasadzie on działa.. gdzie dać np. ścieżkę do plik txt czy coś w tym stylu
#include <iostream>
#include <algorithm>
#include <vector>
#include <string>
#include <cctype>
int main()
{
// remove duplicate elements (normal use)
std::vector<int> v{1,2,3,1,2,3,3,4,5,4,5,6,7};
std::sort(v.begin(), v.end()); // 1 1 2 2 3 3 3 4 4 5 5 6 7
auto last = std::unique(v.begin(), v.end());
// v now holds {1 2 3 4 5 6 7 x x x x x x}, where 'x' is indeterminate
v.erase(last, v.end());
for (int i : v)
std::cout << i << " ";
std::cout << "\n";
// remove consecutive spaces
std::string s = "wanna go to space?";
auto end = std::unique(s.begin(), s.end(), [](char l, char r){
return std::isspace(l) && std::isspace(r) && l == r;
});
// s now holds "wanna go to space?xxxxxxxx", where 'x' is indeterminate
std::cout << std::string(s.begin(), end) << '\n';
}
Zaraz tak się zakręcisz, że zaczniesz zjadać swój ogon. Napisz co dokładnie chcesz osiągnąć. W kilku wątkach poruszasz osobne problemy, których nie potrafisz poskładać do kupy. Może da się to jakoś prosto rozwiązać.
To mi prześlij taki generator który będzie robić liczby z przedziałem min. i max. oraz nie będzie robić powtórzeń.
Nic tylko daj i daj.... Zawsze taki roszczeniowy jesteś?
#include <random>
#include <iostream>
#include <set>
int main()
{
std::random_device rd;
std::mt19937 gen(rd());
std::uniform_int_distribution<> dist(100000, 99999999);
std::set<int> random_numbers;
size_t how_many = 10;
while (random_numbers.size() < how_many)
random_numbers.emplace(dist(gen));
std::set<int>::iterator it;
for (it = random_numbers.begin(); it != random_numbers.end(); ++it)
std::cout << *it << '\n';
std::cout << '\n';
}
``
YooSy napisał(a):
Zaraz tak się zakręcisz, że zaczniesz zjadać swój ogon. Napisz co dokładnie chcesz osiągnąć. W kilku wątkach poruszasz osobne problemy, których nie potrafisz poskładać do kupy. Może da się to jakoś prosto rozwiązać.
To generuje liczby przy nazwie, możliwe jest że będzie duplikat tego samego(wygeneruje losową, ale taką samą liczbę drugi raz).. żeby uniknąć tego że bot który będzie zakładać konta na interii nie dostał dwa razy tego samego (anti-captcha kosztuje ^^) chcę szukać duplikatów a wtedy wklejać to botowi który będzie tego używać.
#include <iostream>
#include <fstream>
#include <stdlib.h>
#include <ctime>
#include <conio.h>
#include <iomanip>
using namespace std;
class losuj{
public:
int cyfry;
losuj(){
srand(time(NULL));
for(int i=0;i<20;i++){
cyfry= rand() %99999999 + 100000;
cout<<cyfry<<endl;
fstream plik( "plik.txt", ios::app );
if( plik.good() )
plik<<cyfry<<endl;
plik.close();
}
}
};
int main()
{
losuj start;
getch();
return 0;
}
std::map będzie odpowiedzią na zapotrzebowanie, gdzie losowana liczba będzie kluczem (key) w mapie, a imię i nazwisko będzie wartością.
Ewentualnie std::set.
- Przed zapisaniem do pliku dodaj wylosowane liczby do zbioru
- Wszystkie elementy zbioru zapisz do pliku
Masz tu przykład jak się używa std:set: https://thispointer.com/stdset-tutorial-part-1-set-usage-details-with-default-sorting-criteria/
yarel napisał(a):
Ewentualnie std::set.
- Przed zapisaniem do pliku dodaj wylosowane liczby do zbioru
- Wszystkie elementy zbioru zapisz do pliku
Masz tu przykład jak się używa std:set: https://thispointer.com/stdset-tutorial-part-1-set-usage-details-with-default-sorting-criteria/
Dzięki ale i tak nie wiem o co chodzi. Jestem początkującym :)
Filip Mach napisał(a):
...
Dzięki ale i tak nie wiem o co chodzi. Jestem początkującym :)
Swój problem "Zapisać do pliku losowe liczby, tak by się nie powtarzały." możesz podzielić na 2 obszary :
- CO zrobić
- JAK zrobić
Każdy z obszarów możesz rozbić na "mniejsze" problemy do rozwiązania.
**CO: ** (logiczne kroki bez wiedzy o tym jak to się przekłada na kod źródłowy w jakimś języku programowania)
- Wygenerować liczby
- Usunąć duplikaty
- Zapisać do pliku
JAK: (tu możesz się zastanowić co jest wejściem, wyjściem (rozwiązaniem) danego problemu i jak wykorzystać konstrukty języka do zbudowania rozwiązania)
2. std::set (zbiór) ma tę właściwość, że element o danej wartości może wystąpić w nim raz, np. dodajesz do zbioru kolejno: 2, 2, 2 a i tak w zbiorze wystąpi tylko jedna 2.
Te rozwiązania mniejszych problemów składasz później w całość... Jak nie znasz konstruktów języka to może być trudno, podobnie jak brak znajomości podstawowych algorytmów i struktur danych.
No ale na tym polega zdobywanie wiedzy, że odkrywasz coś o czym nie miałeś pojęcia i zgłębiasz odkryty temat :D
Zarejestruj się i dołącz do największej społeczności programistów w Polsce.
Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.