0 / 0 / 0
Регистрация: 22.06.2013
Сообщений: 30
|
|
1
|
Ошибка в решении задачи "Ферзь и король" (acmp)
14.08.2013, 13:08. Показов 3083. Ответов 0
Вася продолжает заниматься шахматами, и теперь он изучает различные окончания. Оказалось, что компьютер очень удобно использовать для анализа позиций. Теперь Вася просит вас написать программу, которая сможет определить, что черный король находится под шахом.
Для начала Васе подойдет программа, которая анализирует игровую ситуацию с тем предположением, что на доске находятся три фигуры - белые король и ферзь и черный король. Черный король находится под шахом, если белый ферзь может за один ход попасть на занимаемую им клетку. Шахматный ферзь может перемещаться по вертикали, горизонтали или диагонали, но, в отличие от коня, не может “перепрыгивать” через другие фигуры.
Входные данные
В единственной строке входного файла INPUT.TXT записаны обозначения трех клеток шахматной доски, разделенные пробелами: положения белого короля, белого ферзя и черного короля соответственно. При этом гарантируется, что черный и белый короли не находятся на соседних клетках.
Выходные данные
В выходной файл OUTPUT.TXT выведите слово YES, если черный король находится под шахом и NO, если шаха нет.
Моё решение:
C++ (Qt) | 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
| #include <stdio.h>
#include <iostream>
#include <vector>
#include <string>
#include <math.h>
int main ()
{
freopen("input.txt","r",stdin);
freopen("output.txt","w",stdout);
char str[9];
gets(str);
int iwhite_k;
int iwhite_f;
int iblack_k;
int jwhite_k;
int jwhite_f;
int jblack_k;
iwhite_k = int(str[0])-96;
jwhite_k = int(str[1])-48;
iwhite_f = int(str[3])-96;
jwhite_f = int(str[4])-48;
iblack_k = int(str[6])-96;
jblack_k = int(str[7])-48;
//преобразование букв и цифр в 1-9.
bool k;
k = false;//счётчик шах/не шах
int j = 0;
// горизнт
if (iwhite_f == iblack_k)
{
if (iwhite_f == iwhite_k)
{
if (jwhite_f > jwhite_k && jblack_k > jwhite_k)
k = true;
else if (jwhite_f < jwhite_k && jblack_k < jwhite_k)
k = true;
}
}
// верт
if (jwhite_f == jblack_k)
{
if (jwhite_f == jwhite_k)
{
if (iwhite_f > iwhite_k && iblack_k > iwhite_k)
k = true;
else if (iwhite_f < iwhite_k && iblack_k < iwhite_k)
k = true;
}
}
//диагональ
if (fabs(jwhite_f - jblack_k) == fabs(iwhite_f - iblack_k))
{
if (fabs(jwhite_f - jwhite_k) == fabs(iwhite_f - iwhite_k))
{
if ((jwhite_f >= jwhite_k) && (jblack_k >= jwhite_k))
k = true;
else if ((jwhite_f <= jwhite_k) && (jblack_k <= jwhite_k))
k = true;
}
else
k = true;
}
else
++j;
if (k == true)
printf("YES");
else
printf("NO");
return 0;
} |
|
WA на втором тесте.
Добавлено через 27 минут
C++ (Qt) | 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
| #include <stdio.h>
#include <iostream>
#include <vector>
#include <string>
#include <math.h>
int main ()
{
freopen("input.txt","r",stdin);
freopen("output.txt","w",stdout);
char str[9];
gets(str);
int iwhite_k;
int iwhite_f;
int iblack_k;
int jwhite_k;
int jwhite_f;
int jblack_k;
iwhite_k = int(str[0])-96;
jwhite_k = int(str[1])-48;
iwhite_f = int(str[3])-96;
jwhite_f = int(str[4])-48;
iblack_k = int(str[6])-96;
jblack_k = int(str[7])-48;
//преобразование букв и цифр в 1-9.
bool k;
k = false;//счётчик шах/не шах
// горизнт
if (iwhite_f == iblack_k)
{
if (iwhite_f == iwhite_k)
{
if (jwhite_f > jwhite_k && jblack_k > jwhite_k)
k = true;
else if (jwhite_f < jwhite_k && jblack_k < jwhite_k)
k = true;
}
else
k = true;
}
// верт
if (jwhite_f == jblack_k)
{
if (jwhite_f == jwhite_k)
{
if (iwhite_f > iwhite_k && iblack_k > iwhite_k)
k = true;
else if (iwhite_f < iwhite_k && iblack_k < iwhite_k)
k = true;
}
else
k = true;
}
//диагональ
if (abs(jwhite_f - jblack_k) == abs(iwhite_f - iblack_k))
{
if (abs(jwhite_f - jwhite_k) == abs(iwhite_f - iwhite_k))
{
if ((jwhite_f >= jwhite_k) && (jblack_k >= jwhite_k))
k = true;
else if ((jwhite_f <= jwhite_k) && (jblack_k <= jwhite_k))
k = true;
}
else
k = true;
}
if (k == true)
printf("YES");
else
printf("NO");
return 0;
} |
|
Исправил, банальная невнимательность.
0
|