Задача: На шахматной доске находятся король и несколько ферзей другого цвета. Проверить, находится ли король под угрозой и если да, кто ему угрожает. Положение фигур задано массивом A(8,8): 0 — клетка пуста, 1 — король, 2 — ферзь. Ферзь бьет по горизонтали, вертикали и диагоналям.
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
0 | 1 | 0 | 0 | 0 | 0 | 0 | 2 |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 2 |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
0 | 2 | 2 | 0 | 0 | 0 | 2 | 2 |
Король под угрозой от ферзя на клетке (2,8) (по вертикали)
Король под угрозой от ферзя на клетке (8,2) (по горизонтали)
Король под угрозой от ферзя на клетке (8,8) (по диагонали)
Решение:
Ссылка на ideone C++: http://ideone.com/h4ECiW
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 |
#include <iostream> using namespace std; const int n = 8; int main() { double a[n][n]; int q,p; for (int i=0; i<n; i++){ for (int j=0; j<n; j++){ cin>>a[i][j]; if (a[i][j] == 1) {q=i; p=j;} } } for (int i=q; i>=0; i--) { if (a[i][p]==2) {cout << "Король под угрозой от ферзя ("<<i+1<<","<<p+1<<")\n"; break;}} for (int i=q; i<n; i++) { if (a[i][p]==2) {cout << "Король под угрозой от ферзя ("<<i+1<<","<<p+1<<")\n"; break;}} for (int j=p; j>=0; j--) { if (a[q][j]==2) {cout << "Король под угрозой от ферзя ("<<q+1<<","<<j+1<<")\n"; break;}} for (int j=p; j<n; j++) { if (a[q][j]==2) {cout << "Король под угрозой от ферзя ("<<q+1<<","<<j+1<<")\n"; break;}} for (int i=q,j=p; (i>=0 && j>=0); (i-- && j--)){ if (a[i][j]==2) {cout << "Король под угрозой от ферзя ("<<i+1<<","<<j+1<<")\n"; break;}} for (int i=q,j=p; (i<n && j<n); (i++ && j++)){ if (a[i][j]==2) {cout << "Король под угрозой от ферзя ("<<i+1<<","<<j+1<<")\n"; break;}} for (int i=q,j=p; (i>=0 && j<n); (i-- && j++)){ if (a[i][j]==2) {cout << "Король под угрозой от ферзя ("<<i+1<<","<<j+1<<")\n"; break;}} for (int i=q,j=p; (i<n && j>=0); (i++ && j--)){ if (a[i][j]==2) {cout << "Король под угрозой от ферзя ("<<i+1<<","<<j+1<<")\n"; break;}} } |
Ссылка на ideone Java: http://ideone.com/sIJwPA
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 |
import java.util.*; import java.lang.*; import java.io.*; class Ideone { public static void main (String[] args) throws java.lang.Exception { int n = 8; Scanner in = new Scanner(System.in); int[][] a = new int[n][n]; int q=-1,p=-1; for (int i=0; i<n; i++){ for (int j=0; j<n; j++){ a[i][j]=in.nextInt(); if (a[i][j] == 1) {q=i; p=j;} } } if (q!=-1 && p!=-1){ for (int i=q; i>=0; i--) { if (a[i][p]==2) {System.out.printf("Король под угрозой от ферзя (%d,%d)\n",i+1,p+1);break;}} for (int i=q; i<n; i++) { if (a[i][p]==2) {System.out.printf("Король под угрозой от ферзя (%d,%d)\n",i+1,p+1);break;}} for (int j=p; j>=0; j--) { if (a[q][j]==2) {System.out.printf("Король под угрозой от ферзя (%d,%d)\n",q+1,j+1);break;}} for (int j=p; j<n; j++) { if (a[q][j]==2) {System.out.printf("Король под угрозой от ферзя (%d,%d)\n",q+1,j+1);break;}} for (int i=q,j=p; (i>=0 && j>=0); i--, j--){ if (a[i][j]==2) {System.out.printf("Король под угрозой от ферзя (%d,%d)\n",i+1,j+1);break;}} for (int i=q,j=p; (i<n && j<n); i++, j++){ if (a[i][j]==2) {System.out.printf("Король под угрозой от ферзя (%d,%d)\n",i+1,j+1);break;}} for (int i=q,j=p; (i>=0 && j<n); i--, j++){ if (a[i][j]==2) {System.out.printf("Король под угрозой от ферзя (%d,%d)\n",i+1,j+1);break;}} for (int i=q,j=p; (i<n && j>=0); i++, j--){ if (a[i][j]==2) {System.out.printf("Король под угрозой от ферзя (%d,%d)\n",i+1,j+1);break;}} } } } |
Сначала в цикле вводим массив и ищем где находится король (единичка). Найдя короля, начинаем искать ферзей в восьми направлениях от него (вниз, вверх, вправо, влево и также по диагоналям). Найдя ферзя по одному из направлений выводим его координаты и переходим на следующее направление т.к. все остальные не причинят угрозы королю, потому что между ними и королем стоит фигура (первый найденный ферзь).
Для отправки комментария необходимо войти на сайт.