Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.88/8: Рейтинг темы: голосов - 8, средняя оценка - 4.88
0 / 0 / 0
Регистрация: 07.09.2015
Сообщений: 24
1

Задача про вектор для игры "Быки и коровы"

22.08.2016, 13:08. Просмотров 1482. Ответов 7
Метки нет (Все метки)

Задача из книги Страуструпа, вот условие : программа должна хранить вектор из четырех различных чисел в диапазоне от 0 до 9 (т.е., например, 2345, но не 4455), а пользователь должен угадать число. Дальше идет описание самой игры.
Как я понял тут надо без рандома, но я не понял как это сделать поэтому решил через рандом, и вот что написал:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
#include <cstdlib>
#include <ctime>
#include <vector>
using namespace std;
int main ()
{
    int random_number;
    int firs_value = 1234; //минимальное число из желаемого диапазона
    int last_value = 3;    //ширина выборки (если честно я так и не понял что такое выборка, поэтому наугад написал 3)
    vector <int> myVector (1); 
    for (int i = 0; i < myVector.size; i++)
    {
        random_number = firs_value + rand() % last_value;
        myVector.push_back(random_number);
        cout <<myVector <<endl; //здесь ошибка
    }
    system ("pause");
}
Правильно ли вообще понял суть задачи? И большая просьба, не писать сразу решение задачи, а сказать что искать или какую тему/раздел прочитать, очень хочу сам решить а если уже не смогу то попрошу готовое решение
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.08.2016, 13:08
Ответы с готовыми решениями:

Функция для игры "быки и коровы"
Помогите составить код для С++, для раздела Функции. сама задача Компьютер задумывает...

Ошибка в коде игры "Быки и коровы"
#include &lt;iostream&gt; #include &quot;Game.h&quot; using namespace std; Game::Game() { com; per; }...

Алгоритм игры "Быки и коровы"
Игра &quot;Быки и коровы&quot;. Вы загадываете пятизначное число. Программа дает Вам другое четырехзначное...

Нужен исходник программы "Быки и коровы" с минимальной итерацией
Нигде не нашел код с подобными условиями. Преподаватель решил максимально усложнить задачу. Сам я...

7
Модератор
Эксперт С++
10150 / 8499 / 5165
Регистрация: 18.12.2011
Сообщений: 22,736
22.08.2016, 13:55 2
1.
Цитата Сообщение от bars2525 Посмотреть сообщение
vector <int> myVector (1);
Зачем в начале создается не пустой вектор, а уже содержащий 1 элемент?
2.
В 12 строке надо указать количество вводимых цифр:
C++
1
for (int i = 0; i < 4; i++)
3.
Цитата Сообщение от bars2525 Посмотреть сообщение
cout <<myVector <<endl; //здесь ошибка
Нет перегруженных операций для таких контейнеров. Каждый элемент надо выводить отдельно.
Т.е.
C++
1
2
for (int i = 0; i < myVector.size; i++)
    cout <<myVector[i] <<endl; //здесь ошибка

Цитата Сообщение от bars2525 Посмотреть сообщение
что такое выборка
Имеется ввиду количество возможных случайных значений, для тройки - три возможных значения (0,1,2).
0
0 / 0 / 0
Регистрация: 07.09.2015
Сообщений: 24
05.09.2016, 12:50  [ТС] 3
я сдаюсь((( не получается самому решить, уже весь гугл перерыл и толку ноль.
правда я свой код чуть изменил:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
#include <cstdlib>
#include <ctime>
#include <vector>
#include <algorithm>
using namespace std;
int main ()
{
    int random_number;
    int firs_value =1; //минимальное число из желаемого диапазона
    int last_value = 6;    //ширина выборки
    vector <int> myVector = {1, 2, 3, 4, 5, 6, 7, 8, 9}; 
    srand(unsigned(time(0)));
    for (int i = 1; i <= 4; i++)
    {
        random_number = firs_value + rand() % last_value;   
        myVector.push_back(random_number);
        
    
    cout <<myVector[random_number] ; 
      }
   
}
итак, моя цель(на данном этапе) это исключить повторение чисел при выводе. Как это сделать?
0
nd2
3404 / 2785 / 1251
Регистрация: 29.01.2016
Сообщений: 9,423
05.09.2016, 15:13 4
Цитата Сообщение от bars2525 Посмотреть сообщение
vector <int> myVector = {1, 2, 3, 4, 5, 6, 7, 8, 9};
Это зачем, если в векторе должны быть четыре цифры?
Цитата Сообщение от bars2525 Посмотреть сообщение
for (int i = 1; i <= 4; i++)
Цифры могут повторяться, поэтому тут не четыре должно быть, а проверка размера вектора с уникальными цифрами.
Напиши функцию, которая будет проверять наличие цифры в векторе, и, перед добавлением очередной, проверяй её наличие в векторе, если нет, то добавляешь, и так до тех пор, пока размер вектора не станет равен четырём.
0
0 / 0 / 0
Регистрация: 07.09.2015
Сообщений: 24
05.09.2016, 15:17  [ТС] 5
nd2,
я чего-то подумал, что из тех чисел оно будет выдавать только четыре цифры не повторяющиеся.
хорошо, попробую написать функцию.
0
nd2
3404 / 2785 / 1251
Регистрация: 29.01.2016
Сообщений: 9,423
05.09.2016, 15:39 6
Как-то так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
bool exist(vector <int>& v, int n)
{
    for (size_t i = 0; i < v.size(); ++i)
        if (v[i] == n)
            return true;
    return false;
}
 
void show(vector <int>& v)
{
    for (size_t i = 0; i < v.size(); ++i)
        cout << v[i] << ' ';
    cout << endl;
}
 
int main()
{
    int random_number;
    //int firs_value = 0; //минимальное число из желаемого диапазона
    int last_value = 10;    //ширина выборки
    vector <int> myVector; 
    srand(unsigned(time(0)));
    for ( ; myVector.size() < 4; )
    {
        random_number = rand() % last_value;
        if (!exist(myVector, random_number))
            myVector.push_back(random_number);
    }
    
    show(myVector);
   
    system("pause");
    return 0;
}
1
0 / 0 / 0
Регистрация: 07.09.2015
Сообщений: 24
05.09.2016, 16:16  [ТС] 7
nd2,
спасибо большое, смотря на код, я бы врятли сделал так. Только у меня есть по нему вопросы, можешь по каждой строке расписать подробно все?
P.S. И еще одно, возможно ли более проще сделать?Спрашиваю потому-что я только пол года учу С++, хоть я отчасти вижу знакомые вещи, но по тем учебникам что учу ни разу не доводилось использовать то(напр. эта строка bool exist(vector <int>& v, int n), если я понял то эта передача по ссылке)
0
nd2
3404 / 2785 / 1251
Регистрация: 29.01.2016
Сообщений: 9,423
05.09.2016, 16:27 8
Цитата Сообщение от bars2525 Посмотреть сообщение
можешь по каждой строке расписать подробно все?
Тут особо нечего расписывать. Твой код с некоторыми изменениями, которые я описал в 4 посте.
Цитата Сообщение от bars2525 Посмотреть сообщение
если я понял то эта передача по ссылке)
Да, чтобы избежать копирования вектора (хотя, при таком размере вектора, это не актуально).
Цитата Сообщение от bars2525 Посмотреть сообщение
возможно ли более проще сделать?
Подожди, может кто-нибудь другой вариант предложит, особо об этом не думал.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.09.2016, 16:27

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Игра "быки и коровы"
Доброго всем времени.Помогите понять задачу. Компьютер задумывает четырехзначное число, не...

игра "быки и коровы"
Хочу реализовать программу игры &quot;быки и коровы&quot;, но где-то в третьем сравнении есть ошибка. Суть...

Алгоритм игры Быки -коровы в С++
сложно ли реализовать алгоритм игры Быки -коровы в С++

Ищу исходник игры на С++, на подобие "Солитер", "Быки и коровы", "Змейка" и т. д
Нужен код игры на С++, на подобие &quot;Солитер&quot;, &quot;Быки и коровы&quot;, &quot;Змейка&quot; и т. д. Или ссылки на...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.