Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
0 / 0 / 0
Регистрация: 17.09.2022
Сообщений: 46

Не атакующие друг друга слоны, угроза всех полей

22.06.2024, 12:30. Показов 3004. Ответов 42
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем здравствуйте, столкнулся с такой проблемой, что непонимаю условия задачи, может кто-то поймет, что здесь происходит? Сама задачу звучит так:
Не атакующие друг друга слоны, угроза всех полей
Найти все способы расстановки минимального числа не атакующих друг друга слонов на
шахматной доске размером n х n так, чтобы они держали под угрозой все поля доски.
Исследовать асимптотическую временную сложность решения задачи в зависимости от n.
Подсказка: число фигур = n; для n = 8, число фигур = 8, число расстановок = 5184.

Не понимаю, почем в подсказке фигуры, хотя n - это размерность доски. Может у кого-то есть идеи решения данной задачи? сколько слонов должно быть, 4?
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
22.06.2024, 12:30
Ответы с готовыми решениями:

Какова вероятность того, что слоны не бьют друг друга?
На две наудачу выбранные клетки шахматной доски поставлены два разноцветных слона. Какова вероятность того, что слоны не бьют друг...

Какова вероятность того, что слоны побьют друг друга?
На шахматную доску ставят наудачу двух слонов, белого и черного Какова вероятность того, что слоны побьют друг друга?

Зависимость полей друг от друга
Доброго времени суток!! Подскажите пожалуйста, у меня есть таблица "Слесарь", в которой есть несколько полей, в том числе поля...

42
place status here
 Аватар для gunslinger
3192 / 2227 / 640
Регистрация: 20.07.2013
Сообщений: 6,028
23.06.2024, 00:10
Студворк — интернет-сервис помощи студентам
Но ответ для примера не сходится, получается 22522960 вариантов расстановки при n = 8.
Либо я что-то не так сделал с исходным кодом, чтобы его запустить (маловероятно, но всё может быть), либо задача по ссылке выше отличается (там не указано, что должны быть "под угрозой" все поля доски, и это, судя по всему, влияет на результат).
0
place status here
 Аватар для gunslinger
3192 / 2227 / 640
Регистрация: 20.07.2013
Сообщений: 6,028
23.06.2024, 00:33
Цитата Сообщение от gunslinger Посмотреть сообщение
и это, судя по всему, влияет на результат
Например, мы не должны учитывать подобные ситуации (тут не все поля "под ударом"):
Название: tmp2.png
Просмотров: 62

Размер: 4.4 Кб
Для n = 3 ответ должен быть 2 (вроде как), а не 26 (судя по коду).
Дальше правильный ответ не считал (вручную), но суть (расхождения) должна быть ясна.
Короче, нужно как-то отбрасывать "лишнее". Либо подход "изначальный" менять (ибо это другая задача).
0
Нарушитель
Эксперт функциональных языков программированияЭксперт С++
6697 / 3095 / 1064
Регистрация: 01.06.2021
Сообщений: 11,943
23.06.2024, 05:55
Проблема в том, что ТС не понимает условие, следовательно, он не в состоянии объяснить, что подразумевается под "не атакующие друг друга слоны"? Тут некоторые в теме начали активно рассуждать задачу, что мне показалось, что они поняли условие. Однако, на мой вопрос никто так и не ответил, что говорит о том, что никто не понял условие. Если же условие никому не понятно, то смысл вообще делать вид, мол пытаетесь что-то решить?
0
0 / 0 / 0
Регистрация: 17.09.2022
Сообщений: 46
23.06.2024, 10:22  [ТС]
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
О каких "в 1 ряду таких 64 варианта" вы ведете речь? Откуда взялось 64?
64 - это количество комбинаций в 1 ряду, если менять между собой этих слонов. Вот первая уникальная комбинация, где каждым цветом указан единственный слон - https://kappa.lol/1wsi-. Далее, мы ищем еще 1 комбинацию, можем поменять местами 2 слона между собой - это и будет еще уникальная комбинация - уже нашли 2 таких комбинаций - https://kappa.lol/TQi81. чтобы не сидеть и не менять местами вот так каждую, можно умножить 8 на 8 = 64. в первом ряду будет 64 такие комбинации, где можно переставлять местами. каждый такой ряд одинаковый между собой, следовательно, можно просто 64*8 = 512 комбинаций - это все 8 рядов по горизонтали. также можно сделать и по вертикали. еще 512 комбинаций. 512+512 = 1024. но есть еще комбинации.

Мне нужна код для вычисления всех этих комбинаций. Допустим, программа спрашивает, введите размерность поля, пользователь вводит 8(тк размерность 8, то слонов 8), а на выходе получает 5184 комбинаций(просто число). также для другой размерности. Главное, чтобы слоны не били друг в друга. я прикладываю пдф, старая статья, где объясняется это.

не понимаю вообще, как писать код для этой задачи, помогите пожалуйста
Вложения
Тип файла: pdf a000899_1.pdf (2.30 Мб, 4 просмотров)
0
0 / 0 / 0
Регистрация: 17.09.2022
Сообщений: 46
23.06.2024, 10:27  [ТС]
Цитата Сообщение от Royal_X Посмотреть сообщение
Проблема в том, что ТС не понимает условие, следовательно, он не в состоянии объяснить, что подразумевается под "не атакующие друг друга слоны"
у слонов ход - это диангональ, следовательно, на жтой диагонали не должен стоять другой слон. пример - когда все слоны стоят в 1 ряду, она не угрожают друг другу, но угрожают всему полю. ПОКА ПИСАЛ ЭТОТ ТЕКСТ, ПОНЯЛ, ЧТО Я ДУРАК. ЕСЛИ ПОСТАВИТЬ В 1 ЛИНИЮ, ТО НЕ ПОЛУЧИТСЯ ЗАКРЫТЬ ВСЕ ПОЛЕ. ВСЕ, ЭТО ЖОПА, А НЕ ЗАДАЧА(извините за капс) https://kappa.lol/65aPv

Добавлено через 33 секунды
прошу прощения, способ где все в ряд - не работает
0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
23.06.2024, 11:08
Цитата Сообщение от Judie dkkd Посмотреть сообщение
не угрожают друг другу, но угрожают всему полю.
Это ж как они бьют всё поле стоя на первом ряду ???
Code
1
2
3
4
5
6
7
8
С С С С С С С С
X X X X X X X X
X X X X X X X X
X X X X X X X X
X X X X X X X X
X X X O O X X X
X X O O O O X X
X O O O O O O X
Там где О, кто будет бдить ?

Цитата Сообщение от Royal_X Посмотреть сообщение
Однако, на мой вопрос никто так и не ответил, что говорит о том, что никто не понял условие.
Все поняли, только я не понял что ты не понял.
Ну чё, понял ?

Добавлено через 2 минуты
Цитата Сообщение от Judie dkkd Посмотреть сообщение
прошу прощения, способ где все в ряд - не работает
Работает, если стоят ближе к центру.
0
0 / 0 / 0
Регистрация: 17.09.2022
Сообщений: 46
23.06.2024, 11:22  [ТС]
Цитата Сообщение от SmallEvil Посмотреть сообщение
Работает, если стоят ближе к центру.
а как написать программу, которая будет выводить количество комбинаций? это невозможно(
0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
23.06.2024, 12:29
Прямым перебором даже 8*8 не вытянет.
Нужно искать закономерности.
0
Нарушитель
Эксперт функциональных языков программированияЭксперт С++
6697 / 3095 / 1064
Регистрация: 01.06.2021
Сообщений: 11,943
23.06.2024, 12:30
SmallEvil, ну если ты понял, то объясни, как ты понял, слоны одного цвета или там есть и белые и черные, соответственно, если свой слон атакует своего, то это не считается атакой?
0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
23.06.2024, 12:39
Royal_X,
- считай что все слоны свои
- могут стоять на любых клетках (чёрных и белых)
- расставить что бы ни один слон не "смотрел" стоял на линии боя у другого
- расставить их так, что бы все свободные поля были под боем
- количество слонов равно N (где N - размер доски).

Я так понял, если ТС не сильно исковеркал текст ТЗ.

Добавлено через 2 минуты
ЗЫ : В любом случае, задача-однодневка для гиков.
1
0 / 0 / 0
Регистрация: 17.09.2022
Сообщений: 46
23.06.2024, 12:44  [ТС]
Цитата Сообщение от SmallEvil Посмотреть сообщение
- считай что все слоны свои
- могут стоять на любых клетках (чёрных и белых)
- расставить что бы ни один слон не "смотрел" стоял на линии боя у другого
- расставить их так, что бы все свободные поля были под боем
- количество слонов равно N (где N - размер доски).
все правильно
0
Нарушитель
Эксперт функциональных языков программированияЭксперт С++
6697 / 3095 / 1064
Регистрация: 01.06.2021
Сообщений: 11,943
23.06.2024, 12:54
SmallEvil, типа так
1
0 / 0 / 0
Регистрация: 17.09.2022
Сообщений: 46
23.06.2024, 13:00  [ТС]
Цитата Сообщение от Royal_X Посмотреть сообщение
типа так
да, теперь эти слоны в этой позиции менять можно местами между собой, каждая смена +1 комбинация
0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
23.06.2024, 14:03
Цитата Сообщение от Judie dkkd Посмотреть сообщение
еперь эти слоны в этой позиции менять можно местами между собой
зачем их менять местами ?
что это за фишка и где она в условии ?
0
place status here
 Аватар для gunslinger
3192 / 2227 / 640
Регистрация: 20.07.2013
Сообщений: 6,028
23.06.2024, 14:21
Лучший ответ Сообщение было отмечено Judie dkkd как решение

Решение

Number of arrangements of n non-attacking bishops on an n X n board such that every square of the board is controlled by at least one bishop: https://oeis.org/A122749
FORMULA
From Andy Huchala, Mar 22 2024 (based on Mathematica code): (Start)
a(4*n) = (n+1)^2*((2*n)!)^2.
a(4*n+1) = (1/3)*(n+2)*(1+4*n+6*n^2)*((2*n)!)^2.
a(4*n+2) = 4*(n+1)^4*((2*n)!)^2.
a(4*n+3) = (1/3)*(3+17*n+22*n^2+6*n^3)*(2*n)!*(2*n+2)! . (End)
n a(n)
2 4
3 2
4 16
5 44
6 256
7 768
8 5184
9 25344
10 186624
11 996480
12 8294400
13 57888000
14 530841600
15 4006195200
16 40642560000
17 367408742400
18 4064256000000
19 39358255104000
20 474054819840000
21 5254107586560000
22 68263894056960000
23 804207665479680000
24 11242684107325440000
1
0 / 0 / 0
Регистрация: 17.09.2022
Сообщений: 46
23.06.2024, 14:28  [ТС]
gunslinger, спасибо, под это программу попробую написать
0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
23.06.2024, 14:29
Цитата Сообщение от gunslinger Посмотреть сообщение
FORMULA
Тут больше представляет интерес, какой анализ нужно проделать что бы до такого дойти.
И чему это нас учит ?
И почему это дают в школах для детей (или не школах, для отсталых взрослых) ?
1
place status here
 Аватар для gunslinger
3192 / 2227 / 640
Регистрация: 20.07.2013
Сообщений: 6,028
23.06.2024, 15:04
SmallEvil, как дойти: https://link.springer.com/chap... BFb0097382 или ссылка от ТС-а.
Меня это ничему не учит (если только гуглить), так как мозгов не хватает. Насчет других не знаю.
И, как по мне, задача далеко не тривиальная.

Добавлено через 27 минут
"Неэквивалентный" (inequivalent) случай (частный?): https://oeis.org/A005635
В указанной ситуации, видимо, отбрасываются случаи, которые можно получить "симметричным отображением".
То есть учитываются только "оригинальные" (в своей конфигурации) расположения фигур.

Оригинал ссылки от ТС-а: https://oeis.org/A000899/a000899_1.pdf
0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
23.06.2024, 15:12
Цитата Сообщение от gunslinger Посмотреть сообщение
Тут, видимо, отбрасываются случаи, которые можно получить "симметричным отображением"
Нет! Тут ты ошибаешься.
Я писал методом в лоб, все перестановки, то есть все варианты, и на малых значения совпадают (ну а на больших, нужно стареть и умирать, пока перестановки продолжаются).
То есть зеркальные тоже учитываются.

Добавлено через 3 минуты
Цитата Сообщение от gunslinger Посмотреть сообщение
"Неэквивалентный" (inequivalent) случай (частный?)
По ссылке, ну да, видимо что так.
Вообщем, задачка опередила знания ТС.
Тут нужно грызть и грызть "гранит науки" ))

Добавлено через 1 минуту
Никто не хочет спросить у ЧатоЖопыти, как оно видит решение ? ))
0
place status here
 Аватар для gunslinger
3192 / 2227 / 640
Регистрация: 20.07.2013
Сообщений: 6,028
23.06.2024, 16:56
SmallEvil, подправил текст (чтобы было понятнее). Он относится к "частному" случаю.
Но ты это, видимо, уже понял.

Добавлено через 5 минут
А с жпт стараюсь не общаться. Баловство это (но другие могут считать иначе).

Добавлено через 1 час 33 минуты
На основе
MAPLE
E:=proc(n) local k; if n mod 2 = 0 then k := n/2; if k mod 2 = 0 then RETURN( (k!*(k+2)/2)^2 ); else RETURN( ((k-1)!*(k+1)^2/2)^2 ); fi; else k := (n-1)/2; if k mod 2 = 0 then RETURN( ((k!)^2/12)*(3*k^3+16*k^2+18*k+8) ); else RETURN( ((k-1)!*(k+1)!/12)*(3*k^3+13*k^2-k-3) ); fi; fi; end;
получился код
C++
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
#include <iostream>
using namespace std;
 
#define ull unsigned long long
 
ull fact (unsigned n)
{
  ull res = 1;
  for (unsigned i = 1; i <= n; i++)
    res *= i;
  return res;
}
 
ull count (unsigned n)
{
  if (n < 2)
    return n;
 
  unsigned k;
  ull tmp;
  if (n % 2)
  {
    k = (n - 1) / 2;
    if (k % 2)
    {
      tmp = fact(k - 1);
      return tmp * tmp * k * (k + 1) * (3 * k * k * k + 13 * k * k - k - 3) / 12;
    }
    else
    {
      tmp = fact(k);
      return tmp * tmp * (3 * k * k * k + 16 * k * k + 18 * k + 8) / 12;
    }
  }
  else
  {
    k = n / 2;
    if (k % 2)
    {
      tmp = fact(k - 1) * (k + 1) * (k + 1) / 2;
      return tmp * tmp;
    }
    else
    {
      tmp = fact(k) * (k + 2) / 2;
      return tmp * tmp;
    }
  }
}
 
int main()
{
  unsigned n = 24, i;
  for (i = 1; i <= n; i++)
    cout << "n = " << i << "\tcount = " << count(i) << "\n";
  system("pause");
}
Результат:
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
n = 1   count = 1
n = 2   count = 4
n = 3   count = 2
n = 4   count = 16
n = 5   count = 44
n = 6   count = 256
n = 7   count = 768
n = 8   count = 5184
n = 9   count = 25344
n = 10  count = 186624
n = 11  count = 996480
n = 12  count = 8294400
n = 13  count = 57888000
n = 14  count = 530841600
n = 15  count = 4006195200
n = 16  count = 40642560000
n = 17  count = 367408742400
n = 18  count = 4064256000000
n = 19  count = 39358255104000
n = 20  count = 474054819840000
n = 21  count = 5254107586560000
n = 22  count = 68263894056960000
n = 23  count = 804207665479680000
n = 24  count = 11242684107325440000
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
23.06.2024, 16:56

Классы, использование полей и методов друг друга
Здравствуйте, не могли бы вы мне подсказать, это скорее относится к C++ чем к Qt. У меня есть класс NewItemDialog чей экземпляр...

Как в PHP отделить элементы друг от друга, чтобы не ругались друг на друга?
&lt;?php $chitat = fopen('yoo.txt', 'r'); if (!$chitat) { echo 'Ошибка при открытии файла yoo.txt'; } while (false !== ($char =...

Image наложение друг на друга всех из выбранной папки
private void button4_Click(object sender, EventArgs e) { DirectoryInfo dirInfo = new DirectoryInfo(textBox3.Text); ...

Найти сумму всех чисел в строке отделенных друг от друга различными знаками препинания
Здравствуйте, дано такое задание : с клавиатуры вводится строка,которая содержит некоторое количество целых чисел,отделенных друг от друга...

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


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Baragoz - DPS/HPS бот для WoW 3.3.5a, многоязычный
AmbA 26.10.2026
Хотите ещё ботов? У меня есть один! А я пока отдохну от него. https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=12062&stc=1&d=1793007952 Инструкция внутри. Сразу отвечу: А в PvP с ним. . .
Особенности gif сгенерированных в Си
russiannick 21.10.2026
Рассмотрим генерацию gif файлов, которые в Си имеют свои особенности. Gif представляет собой графический формат популярный в интернете. Посмотрим на палитру. Gif файл сгенерированный в си отличается. . .
FPS контроллер с анимированными Y-Bot и 3D-звуком miniaudio (Box3D, Recast, BehaviorTree.CPP, ozz-animation, ImGui, OpenGL и SDL3)
8Observer8 18.10.2026
Содержание блога | English Version Полное мультиплатформенное руководство по стартовому проекту с FPS-контроллером игрока, анимированными роботами Y-Bot с 4-слойным блендингом, 3D-физикой Box3D,. . .
Локальный http сервер
Argus19 17.10.2026
Локальный http сервер На работе, на двух локальных компьютерах круглосуточно работают программы опроса приборов с записью в книги Excel,которые раз в сутки записываются на сервер компании. Т. к. . . .
Копировать Windows на новый диск на UEFI
damix 17.10.2026
https:/ / uriesk. wordpress. com/ 2016/ 11/ 01/ move-window-10-to-ssd-on-a-uefi-dualboot-system-with-basic-linux-tools/ TL DR Вставляем диск, а старый подключаем через переходник, грузимся с лайва. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru