Здравствуйте, пишу рандомайзер, который выводит из вектора интов число k, а затем удаляет его из вектора
Пытался сначала работать с итераторами, но потом переделал через std::remove из библиотеки с алгоритмами удаление конкретного числа из вектора. Но теперь у меня получается, что всегда выводится последовательность {n,n-1,...,1}
int main()
{
srand(time(NULL));
rand();
int toReturn;
std::cout << "Enter the number of tickets: ";
std::cin >> toReturn;
std::cout << std::endl;
std::vector<int> nums;
for (int i = 1; i <= toReturn; ++i)
{
nums.push_back(i);
}
int choice=0;
bool checked=0;
while (nums.size() > 0)
{
bool inVector=0;
choice = rand() % toReturn + 1;
while(inVector == 0)
{
choice = rand() % toReturn + 1;
for (int i = 0; i < nums.size(); ++i)
{
if (choice == nums[i])
{
inVector = 1;
}
else
{
inVector = 0;
}
}
}
std::cout << "Why not check the ticket " << choice << std::endl;
std::cout << "Did u do it right?" << std::endl;
std::cin >> checked;
if (checked)
{
nums.erase(std::remove(nums.begin(), nums.end(), choice), nums.end());
}
else
{
continue;
}
}
if (nums.size() == 0)
{
std::cout << "You checked all tickets!!!";
}
return 0;
}
Также буду рад, если посоветуете какую-нибудь оптимизацию кода
update: Пусть у нас есть вектор (1,2,3,4,5), алгоритм должен выбрать рандомное число допустим 4, вывести его нам в таком формате: "Проверим билет 4", а затем удалить его, останется вектор (1,2,3,5), ну аналогично ещё 4 рандомных числа удалится, пока не останется нулевой вектор, но моя программа не делает выбор числа рандомным, и всегда выдаёт сначала удаляет 5, затем 4 и так до 1.
Да, спасибо увидел проблему, но полностью переработал код при помощи random_reshuffle таким образом:
#include <iostream>
#include <vector>
#include <algorithm>
#include <ctime>
#include <random>
int main()
{
int toReturn;
std::cout << "Enter the number of tickets: ";
std::cin >> toReturn;
std::cout << std::endl;
std::vector<int> nums;
for (int i = 1; i <= toReturn; ++i)
{
nums.push_back(i);
}
std::random_device rd;
std::mt19937 g(rd());
int choice = 0;
std::shuffle(nums.begin(), nums.end(), g);
while (nums.size() > 0)
{
bool checked = 0;
choice = 0;
std::cout << "Why not to check " << nums[choice];
std::cout << std::endl << "Did you do it right?";
std::cin >> checked;
if (checked == 1)
{
nums.erase(std::remove(nums.begin(), nums.end(), nums[choice]), nums.end());
}
choice++;
}
std::cout << "You checked all tickets!!!";
return 0;
}