По заданному набору доминошек определите, сколько пар «дружных доминошек» можно составить из него - Pascal ABC

Узнай цену своей работы

Формулировка задачи:

Проводя генеральную уборку на дачном чердаке, Саша нашел в комоде кучу доминошек из разных наборов. Каждая доминошка представляет собой прямоугольник, разделенный на две половинки. На каждой из половинок нарисовано от 0 до 6 точек. Ориентации доминошки не имеют — их можно как угодно поворачивать. В совсем раннем детстве Саша видел, как играют в домино: суть игры заключается в том, что надо брать доминошку и как можно громче колотить ею об стол, крича при этом «рыба!». Услышав доносящийся с чердака грохот, наверх поднялся Сашин дедушка. Он смог объяснить Саше настоящие правила игры в домино: игроки составляют длинную цепочку, в которой соседние доминошки касаются половинками с одинаковым числом точек. Саше решил называть «дружными доминошками» пару доминошек, которые можно поставить в игре рядом (т.е. доминошки в паре соприкасаются половинками с равными числами) в том или ином порядке. Играть в домино ему не с кем, поэтому Саша развлекается тем, что всевозможными способами составляет пары и считает количество «дружных доминошек». По заданному набору доминошек определите, сколько пар «дружных доминошек» можно составить из него. Пары, отличающиеся хотя бы одной доминошкой, считаются различными. По-разному составленная пара из одних и тех же доминошек считается один раз. Формат входного файла В первой строке входного файла содержится натуральное число N — количество доминошек (1 < N < 40 000). В каждой из последующих строк содержится описание доминошки: два целых числа X и Y (0 < X, Y < 6) — количество точек на каждой из половинок доминошки. Формат выходного файла Выведите одно число — количество пар дружных доминошек.

Задачу нужно решить методом динамического программирования.

Решение задачи: «По заданному набору доминошек определите, сколько пар «дружных доминошек» можно составить из него»

textual
Листинг программы
var a:array[1..40000,1..2] of byte;
    f:text;
    n,i,j,k:integer;
begin
assign(f,'input.txt');
reset(f);
read(f,n);
for i:=1 to n do
read(f,a[i,1],a[i,2]);
close(f);
k:=0;
for i:=1 to n-1 do
for j:=i+1 to n do
if(a[i,1]=a[j,1])or(a[i,1]=a[j,2])
or(a[i,2]=a[j,1])or(a[i,2]=a[j,2])then inc(k);
assign(f,'output.txt');
rewrite(f);
write(f,k);
close(f);
end.

Объяснение кода листинга программы

Этот код написан на языке Pascal ABC и выполняет следующие действия:

  1. Создает массив a размером 40000x2, и инициализирует его значениями типа byte.
  2. Выводит сообщение input.txt в переменную f.
  3. Считывает число n из файла f.
  4. Для каждого i от 1 до n считывает значения a[i,1] и a[i,2] из файла f.
  5. Устанавливает переменную k равной 0.
  6. Для каждой пары i и j от 1 до n-1 проверяет, являются ли значения a[i,1] и a[j,1] одинаковыми, или значения a[i,2] и a[j,2] одинаковыми. Если это так, то увеличивает значение k на 1.
  7. Выводит сообщение output.txt в переменную f.
  8. Перезаписывает файл f с именем output.txt.
  9. Закрывает файл f.

ИИ для рефератов и докладов


  • Экспорт Word по ГОСТу
  • Минимум 80% уникальности текста
  • Поиск релевантных источников в интернете
  • Готовый документ за 2 минуты

Оцени полезность:

8   голосов , оценка 3.875 из 5
Похожие ответы