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

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

Войти
Регистрация
Восстановить пароль
 
nuts23
0 / 0 / 0
Регистрация: 22.06.2013
Сообщений: 30
#1

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

14.08.2013, 13:08. Просмотров 518. Ответов 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;
}
Исправил, банальная невнимательность.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.08.2013, 13:08     Ошибка в решении задачи "Ферзь и король" (acmp)
Посмотрите здесь:

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

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

Ошибка в программе задачи "голодный ферзь" - C++
Суть задачи: на шахматной доске 8х8 стоит белый ферзь и N черных пешек. На вход программе дается число N, положение ферзя и N строк с...

Неточность в понимании условия задачи "Жук" (acmp) - C++
Моё решение: #include &lt;stdio.h&gt; #include &lt;stdio.h&gt; #include &lt;math.h&gt; #include &lt;cstdio&gt; #include &lt;algorithm&gt; #include &lt;cstring&gt; ...

Задача "Выпуклая оболочка" (acmp) - C++
Вот мой код, при проверке в системе WA на 6-ом тесте. Алгоритм - найти крайние точки и построить прямоугольник по ним. #include &lt;stdio.h&gt;...

Ошибка в книге Скиены "Олимпиадные задачи по програмированию"?! - C++
Итак, всем привет:) Начал я на днях читать книгу Скиены, сейчас на главе про структуры даных. В книге приведен премер задачи &quot;Сборы на...

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

Ошибка при компиляции, отсутствие ";" перед "*" - C++
Доброго времени суток уважаемые форумчане. Пишу вам с надеждой о помощи. Как и было написано выше, компилятор ругается и не могу понять...

Ошибка: namespace "geoo" has no member "ch" - C++
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; using namespace::std; namespace geoo { double PI = 3.14; double circumf(double...

Синтаксическая ошибка: отсутствие ";" перед "<" - C++
Совсем мозг замылился, ничего не пойму, есть допустим такой класс #include &lt;vector&gt; class g { vector &lt;int&gt; j; }; а он в...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

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