Форум программистов, компьютерный форум 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 дня подробнее

Показать сообщение отдельно
undertacker
9 / 9 / 0
Регистрация: 28.04.2013
Сообщений: 55

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

30.05.2013, 13:35. Просмотров 3255. Ответов 15
Метки (Все метки)

Используйте генерацию случайного числа для предоставления коню возможности ходить по шахматной доске случайным образом (конечно, только допустимым

Сам понимаю, что ужасно туплю сейчас, но все же я только учусь.
Вопрос находится в заголовке.
Суть проблемы: понимаю как сделать, но не могу реализовать в программу.
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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
#include <iostream>
#include <iomanip>
#include <ctime>
//глобальные константы, определяющие размерность массива board
const int hor = 8, ver = 8;
//прототип функции для вывода массива, имитирующего шахматную доску, на экран   
void printBoard(int[][ver]);  
using namespace std;
 
int main()
{
   //выделяем память для массива, эмитирующего шахматную доску
   int board[hor][ver] = {0};  
   //описываем этими двумя массивами варианты ходов конем на доске(их всего восемь от 0 до 7)
   int horizontal[hor] = { 2, 1,-1,-2,-2,-1, 1, 2};  
   int vertical[ver] =  {-1,-2,-2,-1, 1, 2, 2, 1};
   int a[hor] = {0};
   int b[8] = {0};
   //массив доступности ходов конем  
   int accessibility[hor][ver] = {{2,3,4,4,4,4,3,2}, 
                                  {3,4,6,6,6,6,4,3},
                                  {4,6,8,8,8,8,6,4},
                                  {4,6,8,8,8,8,6,4},
                                  {4,6,8,8,8,8,6,4},
                                  {4,6,8,8,8,8,6,4},
                                  {3,4,6,6,6,6,4,3},
                                  {2,3,4,4,4,4,3,2}};
   //переменные, запоминающие текущие координаты нахождения коня
   int currentRow, currentColumn;
   //переменная, определяющая вариант хода конем(от 0 до 7)                    
   int moveNumber;
   //счетчик ходов конем                                   
   int counter = 0;                                  
 
   //предложение ввода координаты нахождения коня по горизонтали
   cout << "Enter a horizontal coordinate(0 - 7): "; 
   //сохранение введенных данных в переменной
   cin >> currentRow;
   //ввод координаты по вертикали                                
   cout << "Enter a vertical coordinate(0 - 7): "; 
   //сохранение данных ввода  
   cin >> currentColumn;                             
   
   //переменные currentRow и currentColumn модифицируються для изменения доступностей, поэтому сохраняем их
   int mainRow = currentRow, mainColumn = currentColumn;
   //переменные для записи координат следующего хода конем 
   int Row, Column; 
   
   //начинаем поиск решения
   for(int i = 1; i <= 64; i++)                      
   {
      board[mainRow][mainColumn] = ++counter; 
      
 
      //делаем равным максимально возможной доступности
      int minAccessibility = 8;
      //временные переменные для исследования субдоступностей  
      int minA = 8, minB = 8;  
      
      //уменьшение доступности на единицу клеток, расположенных в одном ходу от выбранной
      for(moveNumber = 0; moveNumber <= 7; moveNumber++) 
      {
         //запоминаем положение коня на доске перед модификацией для изменения доступностей
         currentRow = mainRow;      
         currentColumn = mainColumn;
         
         currentRow += horizontal[moveNumber];  
         currentColumn += vertical[moveNumber];    
      
 
         //не выходит ли за границы доски
         if(currentRow >= 0 && currentRow <= 7 && currentColumn >= 0 && currentColumn <= 7) 
         {
            //уменьшаем доступность всех клеток в одном ходу
            accessibility[currentRow][currentColumn]--;  // 7 5 5 5 5   7
            //если доступность больше, то меняем на меньшую
           
      
               //если не ходили на нее еще, то делаем на нее ход
               if(board[currentRow][currentColumn] == 0)  
               {
                  //подготовили координаты к ходу на эту клетку
                  Row = currentRow; // 5 4
                  Column = currentColumn; // 2 1  
               }
               
               
               }
        
         
      }
      mainRow = Row; // 1
      mainColumn = Column ;  // 4
   }
   
   //вызов функции для печати массива, моделирующего шахматную доску
   printBoard(board);                                
   system ("pause void");
   return 0;
}
   
//вывод массива, печатающего шахматную доску, на экран
void printBoard(int array[][ver])   
{
   cout << endl;
   for(int j = 0; j < ver; j++)
   {
      for(int i = 0; i < hor; i++)
         cout << setw(4) << array[i][j];
         
      cout << endl << endl;
   }
}
вообщем как я понял нам необходимо подсчитать с начала все ходы,
C++
1
currentRow += horizontal[moveNumber];
затем записать их в отдельный массив и в нем найти минимальное значение и максимальное, после чего мы берем рандомом это число. Надеюсь на помощь) Спасибо)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru