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

Восемь ферзей - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Задача на массивы http://www.cyberforum.ru/cpp-beginners/thread696892.html
Дана матрица размерностью N на M, где большинство элементов равно 0. Нужно все элементы матрицы разделить на самое большое число по модулю.
C++ Простейшая программа. Зацикливание. Где ошибка? Ввести вещественное число A (> 1). Вывести наибольшее из целых чисел N, для которых сумма 1 + 1/2 + ... + 1/N будет меньше A, и саму эту сумму #include <iostream> using namespace std; int main() { double http://www.cyberforum.ru/cpp-beginners/thread696891.html
Напишите программу C++
помогите пожалуйсто написать программу.условие в фотографии потрудитесь перепечатать задание.
Операторы с++ C++
Здравствуйте! Кто-то скажет мне что значит такая запись в С++ ? Это алгоритм Эвклида, но очень странная запись, не могу в интернету найти ничего об этом.) ui gcd(ui a, ui b) { while (b) b^=a^=b^=a%=b; return a; }
C++ Ввести продажи книг за 3 года, пользуясь двумерным массивом http://www.cyberforum.ru/cpp-beginners/thread696864.html
Я только что здесь отписывался с этим заданием, но у меня возник еще один вопрос. Моя задача сделать прогу, которая предлагает пользователю ввести количество проданных книг за каждый месяц, а потом она это подсчитует. Но только теперь мне нужно ввести продажи за 3 года, пользуясь двумерным массивом. Вот код: #include <iostream> using namespace std; int main () { char * months= {...
C++ Почему конструктор не работает? Нужна помощь, коллеги, так как сам ничего не понял. Создал класс. Хотелось бы, чтобы при создании объекта явный конструктор класса специфицировал два параметра из string. При попытке специфицировать два параметра компилятор ошибки не выдает, но при запуске программа вылетает. Вот код, проблемное место выделил комментом: //Создать объект my класса Book и вывести 2 параметра объекта my.... подробнее

Показать сообщение отдельно
strange_man
 Аватар для strange_man
9 / 9 / 0
Регистрация: 17.05.2012
Сообщений: 117
13.11.2012, 22:37     Восемь ферзей
Как известно, моя цель - расставить 8 ферзей на столе таким образом, чтобы ни один не попадал под удар. В учебнике Дейтела предлагается такой метод: сначала мы вычисляем значение каждой ячейки, которое равно тому, сколько клеток попадает под удар, если на нее поставить ферзя. А потом заполняем поле ферзями ставя каждый новый на клетку с наименьшим значением, учитывая, чтобы она не оказывалась уже под ударом.
Но метод паршивый, либо мой код паршивый, либо я втупил, так как получается расположить лишь шесть ферзей. Мне очень не нравится мой код из-за двух громоздких функций, но я ничего не могу поделать пока...
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
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
#include <iostream>
 
using namespace std;
 
void exceptSquaresValue (int[][8]);
void exceptSquares (int[][8], int, int);
 
int main()
{
    int board[8][8] = { 0 }; //new array which will be filled while new figures appearing on the board;
    int squares[8][8] = { 0 }; //calculates danger value of each square;
 
    exceptSquaresValue (squares); //after functions do its work, it returns maximal value
 
    for (int n = 1; n <= 8; n++)
    {
        int min = 64;
        int x,y;
 
        for (int i = 0; i <= 7; i++)
        {
            for (int j = 0; j <= 7; j++)
            {
                if (squares[j][i] < min && board[j][i] == 0)
                {
                    min = squares[j][i];
                    x = j;
                    y = i;
                }
            }
        }
 
        board[x][y] = 1;
        exceptSquares (board, x, y);
 
        cout << n << ")  " << x << "-" << y << endl;
    }
 
    system("pause");
    return 0;
}
 
void exceptSquaresValue (int squares[][8]) // calculates value for each square, how many squares wull being struck after queen is placed on it
{
    int row, column;
 
    for (int i = 0; i <= 7; i++)
    {
        for (int j = 0; j <= 7; j++)
        {
            row = i;
            column = j;
 
            //main diagonal
            while (row < 7 && column < 7)
            {
                ++squares[j][i];
                row++;
                column++;
            }
 
            row = i;
            column = j;
 
            while (row > 0 && column > 0)
            {
                ++squares[j][i];
                row--;
                column--;
            }
 
            row = i;
            column = j;
 
            //minor diagonal
            while (row < 7 && column > 0)
            {
                ++squares[j][i];
                row++;
                column--;
            }
 
            row = i;
            column = j;
 
            while (row > 0 && column < 7)
            {
                ++squares[j][i];
                row--;
                column++;
            }
 
            squares[j][i] += 15; // adding all squares in column and row
        }
    }
}
 
void exceptSquares (int board[][8], int x, int y) // when queen places certain square, we must except all squares, where other queens cannot be placed
{
    int row = y;
    int column = x;
 
    for (int i = 0; i <= 7; i++) // excepting row and columns
    {
        board[column][i] = 1;
        board[i][row] = 1;
    }
 
    // main diagonal
    while (row < 7 && column < 7) 
        board[column++][row++] = 1;
 
    row = x;
    column = y;
 
    while (row > 0 && column > 0)
        board[column--][row--] = 1;
 
    row = x;
    column = y;
 
    //minor diagonal
    while (row < 7 && column > 0)
        board[column--][row++] = 1;
 
    row = x;
    column = y;
 
    while (row > 0 && column < 7)
        board[column++][row--] = 1;
}
Извините за комментарии на английском, пытаюсь писать на нем как могу, надо же учиться
Миниатюры
Восемь ферзей  
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 07:42. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru