Форум программистов, компьютерный форум CyberForum.ru

Ход коня по шахматной доске случайным образом - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Обработка записей (список учеников имеет следующую структуру: фамилия – номер школы – число баллов по ЕГЭ – оценка) http://www.cyberforum.ru/cpp-beginners/thread884939.html
Разработать и отладить программу обработки записей. Предусмотреть: - ввод данных - вывод результатов (на экран в виде таблицы и в файл) Задача: Список учеников имеет следующую структуру: фамилия – номер школы – число баллов по ЕГЭ (от 0 до 100) – оценка. При вводе числа баллов рассчитайте оценку (до 40 баллов – «2», 40-59 баллов – «3», 60-89 баллов – «4», 90-100 баллов – «5») и...
C++ Прямые на плоскости(С++) Доброго времени суток господа. Помогите пожалуйста написать эту задачку в С++. Сам с этой задачей пока не разбирался, времени нету, а задач много :cry: (сам пока другими разбираюсь :pardon:) Прямая на плоскости может быть задано уравнением ax+by+c=0, где a и b одновременно не равны нулю. Будем рассматривать прямые только с целыми коэффициентами a,b,c.Пусть даны коэффициенты нескольких прямых:... http://www.cyberforum.ru/cpp-beginners/thread884925.html
void в проекте на c++ C++
Создаю проект, создал модули состоящие из текста! пытаюсь объединить все в одном модуле вывод ошибку! что нужно исправить вот код #include <iostream> #include <stdio.h> #define CASE using namespace std; void arp (); void ipconfig (); void getmac (); void nbtstat (); void netsh ();
написать такой класс, который представляет собой двоичное число C++
не могу справиться вот с этим: написать такой класс, который представляет собой двоичное число. биты держит в виде объекта std::vector <bool>. написать для этого класса следующие операции: слож, выч, умнож, и битовые операции 'и' и 'или' (числа могут быть разной длины, в этом случае они выравниваются по младшему(правому) биту) помогите пожалуйста кто чем может. Хотя бы с чего начать
C++ Найти все целые числа из промежутка от 300 до 600, у которых сумма делителей кратна 10 (Netbeans) http://www.cyberforum.ru/cpp-beginners/thread884854.html
Ребят, помогите пожалуйста написать программу для данной задачи: Найти все целые числа из промежутка от 300 до 600, у которых сумма делителей кратна 10. Никак не получается:( Либо ошибку выдает либо ответ несоответствующий условию выходит.
C++ Выполнить сортировку одномерного массива X(100) методом бинарных вставок Здравствуйте уважаемые пользователи форума, прошу составить программу в с++ просто нужно сдать программу эту через 2 дня подробнее

Показать сообщение отдельно
Мимино
180 / 151 / 5
Регистрация: 22.05.2013
Сообщений: 435
Записей в блоге: 1
30.05.2013, 14:35     Ход коня по шахматной доске случайным образом
Цитата Сообщение от undertacker Посмотреть сообщение
Сам понимаю, что ужасно туплю сейчас, но все же я только учусь.
Вопрос находится в заголовке.
Суть проблемы: понимаю как сделать, но не могу реализовать в программу.

вообщем как я понял нам необходимо подсчитать с начала все ходы,
C++
1
currentRow += horizontal[moveNumber];
затем записать их в отдельный массив и в нем найти минимальное значение и максимальное, после чего мы берем рандомом это число. Надеюсь на помощь) Спасибо)
Это задача про движение коня из 4-й главы Дейтла? Я недавно делал эту задачу и могу Вам сказать, что код "Вашей" программы взят отсюда Путешествие коня
Я его тоже сначала анализировал, чтобы понять. Потом пошел правильным вариантом. В задаче автор рекомендует делать ее пошагово. Сначала без эвристики, потом с. Пока Вы самостоятельно не разберетесь, для чего нужны все эти массивы, когда их вызывать и что в них содержится - задачу Вы не решите.
Если конкретно по вопросу, то заставить коня ходить случайным образом можно случайным образом генерируя переменную
C++
1
moveNumber = rand() % 8;
З.Ы. В коде Вашего источника, по моему мнению, много бесполезных переменных.

Добавлено через 34 минуты
__0 1 2 3 4 5 6 7
0 0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0 0
2 0 0 0 1 0 0 0 0
3 0 0 0 0 0 0 0 0
4 0 0 0 0 0 0 0 0
5 0 0 0 0 0 0 0 0
6 0 0 0 0 0 0 0 0
7 0 0 0 0 0 0 0 0

Суть в чем. Предположим, что конь начинает ходить из координат (2, 3) = 1(номер хода. Чтобы вообще ему походить, у Вас есть 2 массива
C++
1
2
int horizontal[hor] = { 2, 1,-1,-2,-2,-1, 1, 2};
int vertical[ver] =   {-1,-2,-2,-1, 1, 2, 2, 1};
Эти массивы содержат сдвиги текущих координат(горизонтальной и вертикальной) для каждого из 8-ми возможных вариантов хода коня.
Чтобы походить конем "случайно", нужно сместить его текущие координаты на значения из вышеуказанных массивов при условии, что значение на доске с учетом смещения будет равно 0 ( то есть конь там еще не был). Это можно сделать циклом for по счетчику ходов, проверяя для каждого хода условие доступности клетки и условия не выхода за поле. Первый же ход, удовлетворяющий условиям можно расценивать как случайный.
Например, возьмем сначала ход номер 0. Он удовлетворяет условию, т.к. 2 + vertical[0] = 1, 3 + horizontal[0] = 5. В итоге конь станет на доске в координатах (1, 5):

__0 1 2 3 4 5 6 7
0 0 0 0 0 0 0 0 0
1 0 0 0 0 0 2 0 0
2 0 0 0 1 0 0 0 0
3 0 0 0 0 0 0 0 0
4 0 0 0 0 0 0 0 0
5 0 0 0 0 0 0 0 0
6 0 0 0 0 0 0 0 0
7 0 0 0 0 0 0 0 0


Примерно так:
C++
1
2
3
4
5
6
7
8
for (int j = 0; j < hor; j++)
        {
            if (row + vert[j] < 8 && row + vert[j] >=0 
                && column + hori[j] < 8 && column + hori[j] >=0 
                && b[row + vert[j]][column + hori[j]] == 0)
                                   currentRow += vertical[moveNumber];
                       currentColumn += horizontal[moveNumber];
                 }
 
Текущее время: 01:05. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru