@Maxiiiiiiiim

Как составить условие для программы?

Решал задачу:
В день рождения Гоши Саша придумал очень веселый розыгрыш:
своему другу он предложил три подарочных коробки: синюю,
белую и черную. За день до дня рождения Саша подготовился и в
каждую коробку положил случайный предмет из списка:
паук, носок, iPhone 11 Pro, книга по С++, футбольный мяч, флешка,
билет в кино, наручные часы, кефир. Саша поздравил Гошу
и предложил ему выбрать подарочную коробку самостоятельно.

Напиши программу, которая положит в каждую коробочку
случайный предмет из массива подарков (сделай так, чтобы не
повторялись предметы!) и предложит Гоше выбрать подарок.
Результат распаковки выведи на экран :)


Написал код:
#include <iostream>
#include <string>
#include <ctime>
using namespace std;
int main(){
    srand(time(0));
    int d = 0 + rand() % 10; //Рандомное число
    string korbka1[4]; //Инициализирую коробки
    string korbka2[4]; //Инициализирую коробки
    string korbka3[4]; //Инициализирую коробки
    string podarki[9] = { "паук," "носок", "iPhone 11 Pro", "книга по С++", "футбольный мяч", "флешка", "билет в кино", "наручные часы", "кефир"}; //Массив с возможными подарками
    for (int i = 0; i < 4; i++) {
        korbka1[i] = podarki[d]; //Рандомизирую подарки в коробках
        d = 0 + rand() % 10;     //Рандомизирую подарки в коробках
        korbka2[i] = podarki[d]; //Рандомизирую подарки в коробках
        d = 0 + rand() % 10;     //Рандомизирую подарки в коробках
        korbka3[i] = podarki[d]; //Рандомизирую подарки в коробках
        d = 0 + rand() % 10;     //Рандомизирую подарки в коробках
    }
    cout << endl << endl << "1 коробка" << endl; //Вывод распоковки
    
    for (int i = 0; i < 4; i++) {   //Вывод распоковки
        cout << korbka1[i] << endl; //Вывод распоковки
    }
    cout << endl << endl << "2 коробка" << endl; //Вывод распоковки
    
    for (int i = 0; i < 4; i++) { //Вывод распоковки
    cout << korbka2[i] << endl;   //Вывод распоковки
    }
    cout << endl << endl << "3 коробка" << endl; //Вывод распоковки
    for (int i = 0; i < 4; i++) { //Вывод распаковки
    cout << korbka3[i] << endl;   //Вывод распаковки
    }
    
}


Как и где лучше прописать условие чтобы подарки не повторялись, ни в разных, ни в одной и той-же коробке?
  • Вопрос задан
  • 68 просмотров
Пригласить эксперта
Ответы на вопрос 1
vt4a2h
@vt4a2h Куратор тега C++
Senior software engineer (C++/Qt/boost)
Из условия я вижу, что в коробке может быть только один предмет из списка. Следовательно, вам нужно выбрать 4 псевдо-случных элемента из последовательности. Сделать это можно многими способами. Например, можно просто случайно перемешать массив из всех доступных подарков и предложить пользователю выбрать индекс (номер коробки) от 0 до 3. Ну и вывести название подарка под указанным номером. Что-то вроде такого:
std::vector<std::string> presents {"паук", "носок", "iPhone 11 Pro", "книга по С++", "футбольный мяч", "флешка", "билет в кино", "наручные часы", "кефир"};

std::random_device rd;
std::mt19937 g(rd());
 
std::shuffle(presents.begin(), presents.end(), g);

std::size_t boxNumber = 0;
std::cin >> boxNumber;

std::cout << presents[boxNumber] << std::endl;

Тут, понятное дело, надо добавить интерфейсную часть и обработку ошибок ввода...
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы