Вопрос № 58446: Здравствуйте, помогите плз с задачкой:
program paveikslas;
var n: 1..10; {начальное число}
...
begin
read(n);
write(n);
...
end.
Прога запускалась 3 раза, результат Вы видите ниже. Что же тут за вло...
Вопрос № 58.446
Здравствуйте, помогите плз с задачкой:
program paveikslas;
var n: 1..10; {начальное число}
...
begin
read(n);
write(n);
...
end.
Прога запускалась 3 раза, результат Вы видите ниже. Что же тут за вложенные циклы будут? Заранее спасибо!
Приложение:
Отправлен: 10.10.2006, 22:03
Вопрос задал: Dr1m (статус: Посетитель)
Всего ответов: 2 Мини-форум вопроса >>> (сообщений: 1)
Отвечает: NiGHT
Здравствуйте, Dr1m!
На входе есть размерность массива, допустим n. Определяем первый элемент как n/2, с округлением в меньшую сторону. Получим стартовый индекс.
Вот закономерность:
Проход вправо на 1.
Проход вниз на 1.
Проход влево на 2.
Проход вверх на 2.
Проход вправо на 3.
Проход вниз на 3.
Проход влево на 4.
Проход вверх на 4.
Проход вправо на 5.
Проход вниз на 5.
Проход влево на 6, но мы обратились бы к индексу за пределами массива. Это и есть критерий выхода. Если один из очередных индексов больше n или меньше 1 то конец.
Следовательно можно решать по разному:
1. сделать один большой цикл и играться с коэффициентами. Одна переменная за направление, одна от 1 до 2, одна на кол-во длинну прохода.
2. можно сделать 1 большой цикл и в нем 4 маленьких по движению в каждую сторону на "длинну прохода", которую увеличивать в 2х местах.
Ответ отправил: NiGHT (статус: Студент)
Ответ отправлен: 11.10.2006, 04:43 Оценка за ответ: 4
Отвечает: Сухомлин Кирилл Владимирович
Здравствуйте, Dr1m!
Можно завести два константных массива:
const
dx: array[0..3] of Integer = (1, 0, -1, 0);
dy: array[0..3] of Integer = (0, 1, 0, -1); // ось 0Y направлена вниз
Далее написать один большой цикл, в котором происходит смещение вдоль направления (j mod 4) и если направо от направления движения (a[x + dx[(j+1) mod 4], y + dy[(j+1) mod 4]]) пустая ячейка, то повернуть направо.
Кстати, не змейка, а скорее спираль.
В приложении готовый код. Проверить его и отловить возможные ошибки предстоит вам =)
Ну и вывод написать, но это уже просто. А вот зачем в коде write(n); - я не знаю.