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

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

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

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

14.08.2013, 13:08. Просмотров 503. Ответов 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)
Посмотрите здесь:

C++ Ошибка в книге Скиены "Олимпиадные задачи по програмированию"?!
Синтаксическая ошибка: отсутствие ";" перед "<class-head>" C++
C++ error C2143: синтаксическая ошибка: отсутствие "]" перед ";"
C++ Задача "Выпуклая оболочка" (acmp)
Ошибка в решении задачи "Судоку" (acmp) C++
Найти ошибку в решении задачи "Шифровка" (acmp) C++
Неточность в понимании условия задачи "Жук" (acmp) C++
C++ Error C2143: синтаксическая ошибка: отсутствие ";" перед "*"
Error C2143: синтаксическая ошибка: отсутствие ";" перед "<<" C++
C++ Почему происходит ошибка времени выполнения в решении задачи "Ход конем"?
C++ Ошибка при онлайн проверке задачи: "Определить найдены ли все части порваной газеты"
Ошибка в программе задачи "голодный ферзь" C++

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

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

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