Ich habe einen Std :: Vektor mit fester Größe N = 5. Ich möchte, dass jedes Element des Vektors zufällig zwischen zwei positiven Zahlen, insbesondere 1 und 12, ausgewählt wird. (Nullen sind nicht erlaubt). Jedes Element sollte auf dem Vektor eindeutig sein.C++ Vektor mit zufälligen eindeutigen Elementen mit konstanter Summe
Wie kann ich das tun? Die Implementierung ermöglicht bisher, dass Elemente null sind und Duplikate im Vektor enthalten sind. Ich möchte verbessern, um nicht Nullen zu ermöglichen und Duplikate
-Code bisher:
#include <algorithm>
#include <array>
#include <iostream>
#include <iterator>
#include <random>
int main() {
std::random_device rd;
std::mt19937 gen(rd());
constexpr int MAX = 20;
constexpr int LINES = 5;
int sum{};
int maxNum = 12;
int minNum = 1;
std::array<int, LINES> nums;
for (int i = 0; i < LINES; ++i) {
maxNum = std::min(maxNum, MAX - sum);
minNum = std::min(maxNum, std::max(minNum, MAX - maxNum * (LINES - i)));
std::cout << minNum << " " << maxNum << std::endl;
std::uniform_int_distribution<> dist(minNum, maxNum);
int num = dist(gen);
nums[i] = num;
sum += num;
}
std::shuffle(std::begin(nums), std::end(nums), gen);
std::copy(std::begin(nums), std::end(nums), std::ostream_iterator<int>(std::cout, " "));
std::cout << std::endl;
}
@ FrançoisAndrieux, wahr ich den alten Thread w/o es Kopie eingefügt. Jetzt ist meine Frage bearbeitet. Vielen Dank. – cateof
Löschen und erneutes Veröffentlichen von Fragen zum Umgehen von Schließungen. – meagar
Was wäre die Randverteilung der bestimmten Anzahl (n)? –