#c
Вопрос:
Моя программа здесь состоит в том, чтобы случайным образом назначить переменные (number1, number2, number3, number4) числу, хранящемуся в vector <int> number
. Я хочу убедиться, что каждое число будет отображаться только 1 раз. Вот мой код :
#include <iostream>
#include <vector>
#include <random>
#include <ctime>
using namespace std;
int main()
{
srand(time(NULL));
vector<int> number = { 5, 6, 7, 8 };
int number1, number2, number3, number4;
do {
number1 = number[rand() % 4];
number2 = number[rand() % 4];
number3 = number[rand() % 4];
number4 = number[rand() % 4];
if (number2 != number1) {
if (number3 != number1 amp;amp; number3 != number2) {
if (number4 != number1 amp;amp; number4 != number2 amp;amp; number4 != number3) {
cout << number1 << number2 << number3 << number4;
}
}
}
} while ((number1 number2 number3 number4) != 26);
}
Иногда он выводит правильные выходные данные на терминал, но иногда он просто ничего не печатает, и программа завершается. Я не знаю, почему это происходит, может ли кто-нибудь предложить мне решение ?
Комментарии:
1. когда сумма равна 26, программа заканчивается, и она печатает что-то только тогда, когда выполняется какое-то другое условие
2. почему вы думаете, что код всегда должен что-то печатать ?
3. Сумма может быть 26 без выполнения всех 3 ваших условий if (). Я добавил тот же cout после кода, и при первом запуске он напечатал
6686
: https://ideone.com/xtkSH74. В 6 6 8 6 не будет напечатано, но равно 26. Вы хотели убедиться, что каждое число отображается только 1 раз. Если это так, то std::shuffle() может быть тем, что вы хотите, а не тем, что вы делаете: https://en.cppreference.com/w/cpp/algorithm/random_shuffle смотрите пример внизу для рабочей программы.
5. Как только вы нарисовали число, вы можете стереть его из вектора. И так далее, пока не останется только 1 число. Не очень эффективно, но легко понять, и не потребуется никакого
do
цикла или сложного условия. Способ «pro» заключается в использованииstd::shuffle
, как упоминал @drescherjm, но уровень «pro» может быть слишком высоким для вас. Пишите только тот код, который вы понимаете.
Ответ №1:
Я хочу убедиться, что каждое число появится только 1 раз
Вместо того, чтобы выбирать индекс, вы можете shuffle
выбрать его.
#include <iostream>
#include <vector>
#include <random>
int main() {
std::vector<int> number = { 5, 6, 7, 8 };
std::shuffle(number.begin(), number.end(), std::random_device{});
std::cout << number[0] << " " << number[1] << " " << number[2] << " " << number[3] << std::endl;
}