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

Определить, может ли король попасть с первой заданной клетки на вторую одним ходом (шахматы)

13.02.2016, 01:37. Показов 8240. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток. Начал интересоваться C++ и прохожу онлайн курс. Застопорился на условных операторах вот с такой задачей:

Шахматный король ходит по горизонтали, вертикали и диагонали, но только на 1 клетку. Даны две различные клетки шахматной доски, определите, может ли король попасть с первой клетки на вторую одним ходом.
Формат входных данных
Программа получает на вход четыре числа от 1 до 8 каждое, задающие номер столбца и номер строки сначала для первой клетки, потом для второй клетки.
Формат выходных данных
Программа должна вывести YES, если из первой клетки ходом короля можно попасть во вторую или NO в противном случае.

Код:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
using namespace std;
int main(){
    int c1, s1, c2, s2;
    cin >> c1 >> s1 >> c2 >> s2;
    bool colComp (c1 - c2 <= 1 && c1 - c2 >= -1), strComp (s1 - s2 <= 1 && s1 - s2 >= -1);
    if (c1 == c2 && s1 == s2){
        cout << "NO";
    }
    else if (colComp  && strComp){
        cout << "YES";
    }
    else {cout << "NO";}
    return 0;
}
Проблема в том, что там есть форма проверки ответов, для этой задачи она состоит из тридцати автоматических тестов и некоторые из них данное решение не проходит. Кое что я сам понял, решил, например вопрос с тем чтобы король не ходил, как конь, но всё равно мой код не принимается. Модератор внятно ответить почему не смог, только указал что что-то не так с булевыми переменным (вполне возможно ибо я плохо с ними знаком). P.S. Тесты моделируют различные ходы, но какие именно и как в курсе не описано.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.02.2016, 01:37
Ответы с готовыми решениями:

Определить, может ли король попасть с первой заданной клетки на вторую одним ходом
Шахматный король ходит по горизонтали, вертикали и диагонали, но только на 1 клетку. Даны две...

Определить может ли конь попасть с первой клетки на вторую одним ходом?
Добрый день. Задача: Шахматный конь ходит буквой “Г” — на две клетки по вертикали в любом...

Определить, может ли ферзь попасть с первой клетки на вторую одним ходом
Решаю задание на c++. Шахматный ферзь ходит по диагонали, горизонтали или вертикали. Даны две...

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

5
12 / 12 / 5
Регистрация: 02.12.2014
Сообщений: 35
13.02.2016, 01:45 2
Шахматная доска состоит из 8 столбцов и 8 строк. Если король стоит на {1,8} то он может пойти только на две клетки.
Я не вижу тут проверки на выход с доски.
К тому же условие:
Цитата Сообщение от Skazi Посмотреть сообщение
c1 - c2 <= 1 && c1 - c2 >= -1
Будет true только, когда с1 и с2 равны. Ты уверен, что оно правильное?
0
0 / 0 / 0
Регистрация: 07.03.2015
Сообщений: 3
13.02.2016, 01:51  [ТС] 3
Это так, но если в таком случае завести, как второй ход 7 (номер столбца) и 2 (номер строки), то программа покажет "YES". Проверил только что на всякий случай все три хода с такой позиции и они работают. Да, уверен. Собирается, выполняется без сбоев, выдаёт нужные результаты на все ходы, которые я могу смоделировать.
0
82 / 82 / 44
Регистрация: 14.07.2013
Сообщений: 410
13.02.2016, 01:53 4
Лучший ответ Сообщение было отмечено Skazi как решение

Решение

как вариант можешь сделать проверку входных данных, ну что бы они были от 1 к 8 а если отрицательные или больше то писало нет
1
0 / 0 / 0
Регистрация: 07.03.2015
Сообщений: 3
13.02.2016, 01:59  [ТС] 5
Огромное спасибо! Вот так всё приняло:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
using namespace std;
int main(){
int c1, s1, c2, s2;
cin >> c1 >> s1 >> c2 >> s2;
bool colComp (c1 - c2 <= 1 && c1 - c2 >= -1), strComp (s1 - s2 <= 1 && s1 - s2 >= -1);
if (c1 == c2 && s1 == s2){
cout << "NO";
}
else if (colComp && strComp){
    if (c1 <= 0 || s1 <= 0 || c2 <= 0 || s2 <= 0){
        cout << "NO";
    }
    else {cout << "YES";}
 
}
else {cout << "NO";}
return 0;
}
0
20 / 27 / 1
Регистрация: 14.03.2015
Сообщений: 792
13.02.2016, 08:59 6
Посмотрите,
C++
1
2
3
4
5
6
7
8
int c1, s1, c2, s2;
    cin >> c1 >> s1 >> c2 >> s2;
    bool xod;
    if ((c1 == c2 - 1 || c1 == c2 || c1 == c2 + 1) && (s1 == s2 - 1 || s1 == s2 || s1 == s2 + 1))
        cout << " Ura" << endl << endl;
    else
        cout << " Why no?";
    cout << endl << endl;
Вроде работает.
0
13.02.2016, 08:59
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.02.2016, 08:59
Помогаю со студенческими работами здесь

Определить, может ли ферзь попасть с первой клетки на вторую одним ходом
Всем привет Начал изучать питон Засел на задачке про ферзя, условие такие: &quot;Шахматный ферзь...

Может ли ферзь попасть с первой клетки на вторую одним ходом
Доброго времени суток! Условие задачи следующее:Шахматный ферзь ходит по диагонали, горизонтали...

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

Проверить, можно ли с первой заданной клетки попасть на вторую одним ходом черного слона
1. Шахматная доска содержит 8*8 клеток. Горизонтали и вертикали обозначаются цифрами 1-8. Написать...


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

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

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