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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Использование dll без оригинального кода http://www.cyberforum.ru/cpp-beginners/thread937805.html
Добрый день. Имею следующую проблему: Есть библиотека dll без оригинального кода. Открываю её ПЕ Експлорером вижу некоторые импорт и экспорт функции. Кто-нибудь знает, можно ли использовать эти...
C++ Вычисление математической функции exp(x) составил алгоритмы: алг Общ (арг вещ Х, арг цел N, рез вещ S) нач | если N = 0 | | то S:=1 | | иначе S:=Общ(X, N-1)*X/N | все кон алг Эксп (арг вещ Х, арг цел N, рез вещ F) http://www.cyberforum.ru/cpp-beginners/thread937784.html
объявления друг в друге C++
как это переделать чтобы работало typedef struct _Info { _proc CallBack; }*_pInfo; typedef _pInfo(*_proc)(); не строится так как с++ однопроходный
C++ error C2105: для "++" требуется левостороннее значение
Как правильно записать инкремент для указателя на void? Все варианты перепробовал и ничего не помогает int arr = {1, 2, 3, 4, 5}; void *p = (int *)arr; for (int i=0; i<5; ++i) { std::cout...
C++ массив, текст, русские буквы http://www.cyberforum.ru/cpp-beginners/thread937768.html
Добрый день! Возник такой вопрос. Нужен массив с русскоязычным текстом, например: в первой ячейке будет слово "арбуз", во второй "банановый банан", и т.д. Как такое сделать? Какой...
C++ Рекурсия, нужно объяснение работы кода Объясните пожалуйста как работает здесь рекурсия: #include <iostream> void func(int num); int main(void) { func(5); return 0; } void func(int num) подробнее

Показать сообщение отдельно
nuts23
0 / 0 / 0
Регистрация: 22.06.2013
Сообщений: 30

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

14.08.2013, 13:08. Просмотров 530. Ответов 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru