0 / 0 / 0
Регистрация: 22.06.2013
Сообщений: 30
1

Ошибка в решении задачи "Ферзь и король" (acmp)

14.08.2013, 13:08. Показов 3083. Ответов 0
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Вася продолжает заниматься шахматами, и теперь он изучает различные окончания. Оказалось, что компьютер очень удобно использовать для анализа позиций. Теперь Вася просит вас написать программу, которая сможет определить, что черный король находится под шахом.

Для начала Васе подойдет программа, которая анализирует игровую ситуацию с тем предположением, что на доске находятся три фигуры - белые король и ферзь и черный король. Черный король находится под шахом, если белый ферзь может за один ход попасть на занимаемую им клетку. Шахматный ферзь может перемещаться по вертикали, горизонтали или диагонали, но, в отличие от коня, не может “перепрыгивать” через другие фигуры.

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

В единственной строке входного файла 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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.08.2013, 13:08
Ответы с готовыми решениями:

Ферзь и король acmp
Привет всем! Я решаю такую задачу: Вася продолжает заниматься шахматами, и теперь он изучает...

Ошибка в решении задачи "Судоку" (acmp)
Здравствуйте. Моё решение: #include &lt;stdio.h&gt; #include &lt;stdio.h&gt; #include &lt;math.h&gt; #include...

Найти ошибку в решении задачи "Шифровка" (acmp)
#include &lt;stdio.h&gt; #include &lt;stdio.h&gt; #include &lt;math.h&gt; #include &lt;cstdio&gt; #include &lt;algorithm&gt;...

Король и ферзь
На шахматной доске находится король и два ферзя, шахматная доска задается массивом K(8;8) 1 это...

Ошибка в решении задачи
C++ Здравствуйте Подскажите пожалуйста что я сделал не так, программа открывается, но...

0
14.08.2013, 13:08
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.08.2013, 13:08
Помогаю со студенческими работами здесь

Ошибка в решении задачи JS
Требуется написать страницу которая будет добавлять элементы ненумерованного списка, при этом...

Ошибка в решении задачи
Однажды известный профессор обнаружил описания k конечных автоматов. По его мнению, нетривиальность...

Ошибка в решении задачи
Условие задачи: найти в списке элементы с одинаковым значением но с противоположным знаком и...

Ошибка в решении задачи
Задача: Моё решение: using System; using System.Linq; using System.Collections.Generic; ...

Ошибка в решении интерполяционной задачи
Дали задание вычислить значения заданной функции {y}_{i}=f({x}_{i}) в узлах интерполяции {x}_{i} =...

Ошибка при решении задачи
Всем доброго времени суток! Решаю тут одну задачу, поясню вкратце суть: На вход дается матрица...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru