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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.69
Катюнька
0 / 0 / 0
Регистрация: 10.12.2009
Сообщений: 26
#1

Шахматы - C++

17.05.2010, 03:01. Просмотров 1756. Ответов 2
Метки нет (Все метки)

По умолчанию Ферзь, ладья и конь
Ферзь, ладья и конь

На шахматной доске 8х8 расположены три фигуры: ферзь, ладья и конь. Требуется определить количество пустых полей доски, которые находятся под боем. Для простоты будем полагать, что фигуры могут «бить» через другие фигуры.

Входные данные

В единственной строке входного файла INPUT.TXT записаны через пробел координаты расположения трех фигур: ферзя, ладьи и коня соответственно. Каждая координата состоит из одного латинского символа (от A до H) и одной цифры (от 1 до 8).

Выходные данные

В выходной файл OUTPUT.TXT нужно вывести количество пустых полей, которые бьют указанные во входных данных фигуры.

Пример
№ INPUT.TXT OUTPUT.TXT
1 D1 D3 E5 29

Среда программирования Visual C++ 2005
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.05.2010, 03:01
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Шахматы (C++):

Шахматы в С++ - C++
Ребят, срочно, помогите, пожалуйста. Нужно написать код для простейшей компьютерной игры: шахмат. Ничего не понимаю ни в шахматах, ни в...

Шахматы в с++ - C++
Даны фигуры: Пешка, слон, король.(цвет фигуры не зависит). Суть задачи состоит в том, что человек вводит координаты фигур, а программа...

шахматы - C++
Разработать класс для моделирования шахматной фигуры, позволяю- щий хранить вместе с экземпляром объекта его координаты на доске, цвет...

Шахматы - C++
не могу понять задачи .. помогите Класс "фигура": координаты на шахматной доске, цвет. Метод - "ход" на одну позицию в одном из 4...

Шахматы - C++
Помогите пожалуйста решить прогу, так как я абсолютно не шарю, что здесь делать. Вот в чём она заключается: На шахматной доске стоит белый...

Шахматы - C++
Помогите пожалуйста разобраться с задачкой.. Даны натуральные числа k,l,m,n. Необходимо выяснить, угрожает ли конь, стоящий на поле...

2
Psixodelik
40 / 39 / 2
Регистрация: 27.11.2009
Сообщений: 100
17.05.2010, 08:17 #2
Я вот непонимаю, зачем тут просить решать олимпиадные задачи? Ну я понимаю если какой то момент не получается...но решать всю задачу это ппц
0
Mr.X
Эксперт С++
3049 / 1694 / 265
Регистрация: 03.05.2010
Сообщений: 3,867
17.05.2010, 13:25 #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
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
//На шахматной доске 8х8 расположены три фигуры: ферзь, ладья и конь. 
//Требуется определить количество пустых полей доски, которые находятся под боем. 
//Для простоты будем полагать, что фигуры могут «бить» через другие фигуры.
#include <set>
#include <string>
#include <iostream>
#include <locale>
 
typedef std::string             T_pole_coord;
typedef std::set<T_pole_coord>  T_pole_set;
 
bool is_na_doske(T_pole_coord figure_coord)
{
    return 'A' <= figure_coord[0] && figure_coord[0] <= 'H'
           && '1' <= figure_coord[1] && figure_coord[1] <= '8';
}
 
bool bjet_kon
    (
        T_pole_coord  kon_coord, 
        char          vert, 
        char          horiz
    )
{
    if(!is_na_doske(kon_coord)) return false;
    return abs((kon_coord[0] - vert) * (kon_coord[1] - horiz)) == 2;
}
 
bool bjet_lad
    (
        T_pole_coord  lad_coord, 
        char          vert, 
        char          horiz
    )
{
    if(!is_na_doske(lad_coord)) return false;
    return (lad_coord[0] - vert) * (lad_coord[1] - horiz) == 0;      
}
 
bool bjet_ferz
    (
        T_pole_coord  ferz_coord, 
        char          vert, 
        char          horiz
    )
{
    if(!is_na_doske(ferz_coord)) return false;
    return bjet_lad(ferz_coord, vert, horiz)
           || abs(ferz_coord[0] - vert) == abs(ferz_coord[1] - horiz);
}
 
size_t  get_ferz_lad_kon_bjut_poley
    (
        T_pole_coord  ferz_coord,
        T_pole_coord  lad_coord,
        T_pole_coord  kon_coord
    )
{
    T_pole_set  res_pole_set;
 
    for(char vert = 'A'; vert <= 'H'; ++vert)
    {
        for(char horiz = '1'; horiz <= '8'; ++horiz)
        {
            if(bjet_kon(kon_coord, vert, horiz)
               || bjet_lad(lad_coord, vert, horiz)
               || bjet_ferz(ferz_coord, vert, horiz))
            {
                res_pole_set.insert(T_pole_coord(1, vert) + horiz);
            }
        }//for(char horiz = '1'; horiz <= '8'; ++horiz)
    }//for(char vert = 'A'; vert <= 'H'; ++vert)
 
    res_pole_set.erase(ferz_coord);
    res_pole_set.erase(lad_coord);
    res_pole_set.erase(kon_coord);           
    return res_pole_set.size();
}
 
int main()
{
    std::locale::global(std::locale("rus"));
    T_pole_coord ferz_coord;
    T_pole_coord lad_coord;
    T_pole_coord kon_coord;
    for(;;)
    {        
        std::cout << "Введите координаты фигур в виде A1, C8, H3, и т.д."
                  << std::endl
                  << "Ферзь: ";
        std::cin >> ferz_coord;
        do
        {
            std::cout << "Ладья: ";
            std::cin >> lad_coord;
        }while(lad_coord == ferz_coord);
 
        do
        {
            std::cout << "Конь:  ";
            std::cin >> kon_coord;
        }while(kon_coord == ferz_coord
               || kon_coord == lad_coord);
        std::cout << std::endl
                  << "Бьют полей: "
                  << get_ferz_lad_kon_bjut_poley(ferz_coord, lad_coord, kon_coord)
                  << std::endl
                  << std::endl
                  << std::endl;        
    }
    return 0;
}
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.05.2010, 13:25
Привет! Вот еще темы с ответами:

Шахматы в консоли - C++
Хочу написать шахматы в консоли, но не знаю какой тип нужен для символов шахматных фигур, и вообще поддерживает ли их консоль? К примеру,...

Шахматы, конь - C++
Всем доброго времени суток! Буду честен - в универе задали задачу на макс.балл(все предыдущие сделал, но с этой возникла проблемка)....

Классы (шахматы) - C++
5. Шахматы. Создайте класс kletka. У него должно быть два поля: vert: (a, b, c, d, e, f, g, h) и hor: 1..8. Реализуйте методы: 0)...

Шахматы. Ферзь - C++
Поле шахматной доски определяется парой натуральных чисел, первое из которых задает номер вертикали, а второе — номер горизонтали. Даны...


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

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

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