Шифрования, который часто используют начинающие криптографы, заклю- чается в том, что шифруемое слово записывается некоторым достаточно хитрым образом в клетках
квадрата. Одним из таких, не очень удачных шифров, является шифр "Змейка".
Он применяется для шифрования слов длины n^2 (если длины слова меньше, оно дополняется
точками). Слово разбивается на части длиной по n символов каждая. Далее эти части записыва-
ются в квадрат размером n на n (каждая часть в отдельную строку), при этом части с четными
номерами записываются задом наперед. Например, слово Iloveyou., полученное из фразы I love
you. удалением пробелов, будет закодировано следующим образом.
Оно будет разбито на три части: Ilo, vey, ou.. Эти части далее будут записаны в квадрат так:
Можно видеть, что шифруемое слово записано в этом квадрате "змейкой".
Задан квадрат, получившийся в результате шифрования некоторого слова описанным
Необходимо выяснить, содержится ли в исходном слове подстрока t.
Формат ввода:
Первая строка входного файла содержит целое число n (1 <= n <= 50). Последующие n строк
содержат каждая по n символов - строки квадрата, начиная с первой. Последняя строка входного
файла содержит искомую непустую строку t, длина которой не превышает 1000 символов. Квадрат
и строка t состоят только из строчных букв латинского алфавита и точек.
Формат вывода:
В выходной файл выведите слово YES, если строка t содержится в зашифрованной строке, и
слово NO - в противном случае.
Пример ввода: Пример вывода:
3
Ilo
yev
ou.
you
YES
3
Ilo
yev
ou.
me
NO
for i:=1 to 9 do write(i); writeln(10);
for i:=0 to 8 do write(i); writeln(9);
for i:=1 to 2 do write('0'); for i:=1 to 7 do write(i); writeln('8');
for i:=1 to 3 do write('0'); for i:=1 to 6 do write(i); writeln('7');
for i:=1 to 4 do write('0'); for i:=1 to 5 do write(i); writeln('6');
for i:=1 to 5 do write('0'); for i:=1 to 4 do write(i); writeln(5);
for i:=1 to 6 do write('0'); for i:=1 to 3 do write(i); writeln('4');
for i:=1 to 7 do write('0'); for i:=1 to 2 do write(i); writeln(3);
for i:=1 to 8 do write('0'); write('1');writeln('2');
for i:=1 to 9 do write('0'); writeln(1);
end.
Как сделать более кратко не знаю. Но эта программа работает.
nn = 20;
var
i, j, n: integer;
a: array[1..nn, 1..nn] of integer;
begin
writeln('Задайте размер матрицы n');
readln(n);
if n > nn then
writeln('Вы превысили допустимый размер матрицы 20')
else begin
writeln('Матрица-результат');
for i := 1 to n do
begin
writeln;
for j := 1 to n do begin
if i < j then a[i, j] := 1
else if i = j then a[i, j] := 2
else a[i, j] := 3;
write(a[i, j]:2)
end;
end;
writeln
end
end.
Тестовый пример:
Задайте размер матрицы n
10
Матрица-результат
2 1 1 1 1 1 1 1 1 1
3 2 1 1 1 1 1 1 1 1
3 3 2 1 1 1 1 1 1 1
3 3 3 2 1 1 1 1 1 1
3 3 3 3 2 1 1 1 1 1
3 3 3 3 3 2 1 1 1 1
3 3 3 3 3 3 2 1 1 1
3 3 3 3 3 3 3 2 1 1
3 3 3 3 3 3 3 3 2 1
3 3 3 3 3 3 3 3 3 2