ПОМОГИТЕ ПОЖАЛУЙСТА С ИНФОРМАТИКОЙ. PASCAL ABC. 25 БАЛЛОВ БЛОХА И КУБ. Блоха находится в вершине куба. За один прыжок она может переместиться в любую соседнюю вершину. Сколькими различными путями она ровно за N прыжков может оказаться в противоположной вершине? нужно написать программу для pascal abc!!!
Ответы на вопрос
Ответил A1dar
0
Представим куб в виде графа его каркаса. Пронумеруем все вершины куба цифрами от 1 до 8. Задача сводится к обычному обходу в ширину. Для четных N ответ будет 0, т.к. нельзя дойти на противоположную вершину за четное кол-во шагов. Ответ будет расти в геометрической прогрессии в зависимости от N. Программа:
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.
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.
Ответил A1dar
0
Если очень большие значения N, то нужно оптимизировать программа, а именно избавится от матрицы смежности и для каждой вершины оставить в памяти только 3 соседние. Также можно обойтись всего двумя массивами, исключив двумерный, потому что мы обращаемся только к предыдущим элементами массива, другие нас не интересуют
Ответил A1dar
0
к тому же придется писать кучу строк кода для длинной арифметики, либо же использовать встроенный BigInteger из PascalABC.NET
Ответил novikovkirill
0
в программе видимо ошибка, везде пишет на исполнении 0
Ответил novikovkirill
0
Можешь написать программу не для PascalNet, а просто для Pascal ABC?
Ответил A1dar
0
Введи 3. Что выводит?
Новые вопросы