Представим куб в виде графа его каркаса. Пронумеруем все вершины куба цифрами от 1 до 8. Задача сводится к обычному обходу в ширину. Для четных N ответ будет 0, т.к. нельзя дойти на противоположную вершину за четное кол-во шагов. ответ будет расти в геометрической прогрессии в зависимости от N. Программа:
var n, i, j, k: integer; a: array[0..100, 1..8] of int64; begin read(n); a[0, 1] := 1; for k := 1 to n do for i := 1 to 8 do for j := 1 to 8 do if m[i, j] = 1 then a[k, i] := a[k, i] + a[k - 1, j]; write(a[n, 8]); end.
// PascalABC.NET 3.3.5, сборка 1640 от 17.03.2018 // Внимание! Если программа не работает, обновите версию!
procedure ArrRead(var a:array of integer); begin var n:=ReadInteger('Количество элементов в массиве:'); a:=ReadArrInteger('Введите элементы массива:',n) end;
procedure ArrMult(a:array of integer; var p:BigInteger); begin p:=a.Aggregate(BigInteger(1),(p,q)->p*q) end;
begin var m1,m2:array of integer; ArrRead(m1); ArrRead(m2); var p1,p2:BigInteger; ArrMult(m1,p1); ArrMult(m2,p2); Writeln('Произведение элементов первого массива ',p1); Writeln('Произведение элементов второго массива ',p2); Writeln('Общее произведение ',p1*p2) end.
const
m: array[1..8, 1..8] of byte =
((0, 1, 1, 1, 0, 0, 0, 0),
(1, 0, 0, 0, 1, 0, 1, 0),
(1, 0, 0, 0, 1, 1, 0, 0),
(1, 0, 0, 0, 0, 1, 1, 0),
(0, 1, 1, 0, 0, 0, 0, 1),
(0, 0, 1, 1, 0, 0, 0, 1),
(0, 1, 0, 1, 0, 0, 0, 1),
(0, 0, 0, 0, 1, 1, 1, 0));
var
n, i, j, k: integer;
a: array[0..100, 1..8] of int64;
begin
read(n);
a[0, 1] := 1;
for k := 1 to n do
for i := 1 to 8 do
for j := 1 to 8 do
if m[i, j] = 1 then
a[k, i] := a[k, i] + a[k - 1, j];
write(a[n, 8]);
end.
// Внимание! Если программа не работает, обновите версию!
procedure ArrRead(var a:array of integer);
begin
var n:=ReadInteger('Количество элементов в массиве:');
a:=ReadArrInteger('Введите элементы массива:',n)
end;
procedure ArrMult(a:array of integer; var p:BigInteger);
begin
p:=a.Aggregate(BigInteger(1),(p,q)->p*q)
end;
begin
var m1,m2:array of integer;
ArrRead(m1); ArrRead(m2);
var p1,p2:BigInteger;
ArrMult(m1,p1); ArrMult(m2,p2);
Writeln('Произведение элементов первого массива ',p1);
Writeln('Произведение элементов второго массива ',p2);
Writeln('Общее произведение ',p1*p2)
end.