Сергей, рада что тебе нравится и интересно, хотя ты так и не написала насколько твое решение лучше остальных и что в других решениях было полезно! :)
Молодец, рада что сам уже делаешь! :)
Спасибо!
Видеоурок я посмотрел позже, уже после отправки отчёта: оказалось, что там разбирается решение в общем случае, с которым у меня возникли трудности при самостоятельном решении. Так что, в поле "Чему научился" надо было бы вписать это решение: идея с диагоналями в таком виде в голову не пришла. Я хотел на каждом шаге делать проверку для фигуры: стоит она под боем или нет. Для этого предусмотрена процедура, проверяющая совпадение вертикали, горизонтали или диагонали. Последняя проверяется в общем случае по правилу |ф1.x - ф2.x| == |ф1.y - ф2.y|. Но моё решение для N стало слишком запутанным. А программа для доски 4x4 вот такая:
//www.VideoSharp.info/Консоль/Комбинаторика/Четыре ферзя
using System;
class VideoSharp
{
static void Main(string[] args)
{
ferz a = new ferz(0, 0),
b = new ferz(0, 1),
c = new ferz(0, 2),
d = new ferz(0, 3);
int result = 0;
for (int i = 0; i < 4; ++i)
for (int j = 0; j < 4; ++j)
for (int k = 0; k < 4; ++k)
for (int l = 0; l < 4; ++l)
{
a.x = i; b.x = j; c.x = k; d.x = l;
if (!check(a,b) &&
!check(a,c) &&
!check(a,d) &&
!check(b,c) &&
!check(b,d) &&
!check(c,d))
result++;
}
Console.WriteLine(result);
}
private static bool check(ferz a, ferz b)
{
if (a.x == b.x ||
a.y == b.y ||
b.y - a.y == Math.Abs(b.x - a.x))
return true;
return false;
}
}
class ferz
{
public int x, y;
public ferz(int i, int j)
{
x = i;
y = j;
}
}
Сергей, Благодарю на подробный ответ, даже отчет, уверена что не одной мне он станет полезен! СПАСИБО! Молодец! :)