Все о Pascal
Главная
Вход
Регистрация
Суббота, 18.05.2024, 08:55Приветствую Вас, программист Гость | RSS
Меню сайта

Категории раздела
Уроки Pascal [36]
Мемы - "Типичный программист" [1]
Задачи [10]
Заработок в интернете [14]
Олимпиадные задчи [1]

Наш опрос
Оцените мой сайт
Всего ответов: 249

Статистика

Форма входа

Главная » Статьи » Задачи

Ферзь Ладья и Конь

Ферзь, ладья и конь

(Время: 1 сек. Память: 16 Мб Сложность: 34%)

На шахматной доске 8х8 расположены три фигуры: ферзь, ладья и конь. Требуется определить количество пустых полей доски, которые находятся под боем. Для простоты будем полагать, что фигуры могут «бить» через другие фигуры. Например, в рассмотренной справа ситуации будем считать, что ферзь бьет D5 через ладью.

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

В единственной строке входного файла INPUT.TXT записаны через пробел координаты расположения трех фигур: ферзя, ладьи и коня соответственно. Каждая координата состоит из одного латинского символа (от A до H) и одной цифры (от 1 до 8).

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

В выходной файл OUTPUT.TXT нужно вывести количество пустых полей, которые бьют указанные во входных данных фигуры.

Пример

INPUT.TXTOUTPUT.TXT
1D1 D3 E529

pascal, pascal, pascal, pascal
Категория: Задачи | Добавил: yurabobr1 (15.11.2012)
Просмотров: 3610 | Комментарии: 3 | Теги: Цифры, ферзь pascal, конь, задачи pascal, ладью, фигур, ладья | Рейтинг: 0.0/0
Всего комментариев: 1
1 yurabobr1  
0
#include <stdio.h>

int ABSI(int a)
{ return (a<0)?(-a):(a); };

int main()
{
char kx, ky, fx, fy, lx, ly, c;
unsigned int sum = 0;

FILE * f = fopen("input.txt", "r");
fscanf(f,"%c%c", &fx, &fy);
fscanf(f,"%c",&c);
fscanf(f,"%c%c", &lx, &ly);
fscanf(f,"%c",&c);
fscanf(f,"%c%c", &kx, &ky);
fscanf(f,"%c",&c);
fclose(f);

fx -= 65; lx -= 65; kx -= 65;
fy -= 49; ly -= 49; ky -= 49;

for (int x = 0; x < 8; x++)
for (int y = 0; y < 8; y++)
{
if ( ((x==lx)&&(y==ly)) || ((x==fx)&&(y==fy)) || ((x==kx)&&(y==ky)) ) continue;
if ((x == lx)||(y == ly)) {sum++; continue;};
if ((ABSI(fx - x) == ABSI(fy - y)) || (x == fx) || (y == fy)) {sum++; continue;};
if ((x+2==kx)&&(y+1==ky) || (x+2==kx)&&(y-1==ky) || (x-2==kx)&&(y+1==ky) || (x-2==kx)&&(y-1==ky) ||
(x+1==kx)&&(y+2==ky) || (x+1==kx)&&(y-2==ky) || (x-1==kx)&&(y-2==ky) || (x-1==kx)&&(y+2==ky)) {sum++; continue;};
}

f = fopen("output.txt", "wt");
fprintf(f, "%d\n", sum);
fclose(f);

return 0;
}

Код на С++
Accepted

Имя *:
Email *:
Код *:
Поиск

Друзья сайта
  • Официальный блог
  • Сообщество uCoz
  • FAQ по системе
  • Инструкции для uCoz


  • Copyright MyCorp © 2024