forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Алгоритмика (http://forum.boolean.name/forumdisplay.php?f=21)
-   -   Abracodabra# (http://forum.boolean.name/showthread.php?t=5268)

Alex_90 11.12.2007 21:39

Abracodabra#
 
Вложений: 4
HELLO,WORLD
Вот несколько дней назад участвовал в олимпиаде по программированию:) и сейчас, так сказать, провожу разбор полетов:
Вот одна задачка, которую я не решил на олимпиаде:
Цитата:

Задача С Метод бутерброда
Секретное агентство «Super-Secret-no» решило для шифрования переписки своих сотрудников использовать «метод бутерброда». Сначала буквы слова нумеруются в таком порядке: первая буква получает номер 1, последняя буква -номер 2, вторая - номер 3, предпоследняя - номер 4, потом третья ... и так для всех букв (см. рисунок). Затем все буквы записываются в шифр в порядке своих номеров. В конец зашифрованного слова добавляется знак «диез» (#), который нельзя использовать в сообщениях.
Например, слово «sandwich» зашифруется в «shacnidw#».
Вложение 5292
К сожалению, программист «Super-Secret-no», написал только программу шифрования и уволился. И теперь агенты не могут понять, что же они написали друг другу. Помогите им.
Формат входных данных
Вводится слово, зашифрованное методом бутерброда. Длина слова не превышает 20 букв.
Формат выходных данных
Выведите расшифрованное слово. Пример
Вложение 5293
А вот мой вариант решения (неправильный):
Цитата:

uses crt;
var
s:string[21];
s1:string[20];
d:integer;
i1,i2:integer;
begin
clrscr;
readln (s);
d:=length (s);
delete (s,d,1);
i2:=0;
for i1:=1 to d div 2 do begin
s1[i1]:=s[i1];
s1[d-i2]:=s[i1+1];
i2:=i2+1;
end;
for i1:=1 to 20 do begin
write (s1[i1]);
end;
readkey;
end.
Решал на Pascal.
Может кто знает, как решать?;)

zheland 11.12.2007 22:03

Re: Abracodabra#
 
Я был на этой олимпиаде!!!:beer:
Решил, но непомню как?!?:-D
Решал на QBasic(Знал лучше всех)
Решать несложно!!!

Первую цифру в начало(1 символ), вторую в конец(последний символ),
третью после первой(2 символ), четвертую перед последней(предпоследний символ),
...

H@NON 11.12.2007 22:12

Re: Abracodabra#
 
незнаю что у тебя написано, но алгоритм расшифровки думаю будет таким: берем зашифрованное слово, сначало записываем в новое слово(расшифровка) нечетные буквы, затем четные и получаем на выходе расшифрованное слово.
Код:

const shifrslovo$
global iskomoeslovo$

lenght = len(shifrslovo$)
for n = 1 to lenght Step 2
    a$ = mid(shifrslovo$, n, 1)
    iskomoeslovo$=iskomoeslovo$+a$
next

for m = 2 to lenght Step 2
    a$ = mid(shifrslovo$, m, 1)
    iskomoeslovo$=iskomoeslovo$+a$
next

Print iskomoeslovo$


zheland 11.12.2007 22:37

Re: Abracodabra#
 
Ты не правильно понял:
Вот зашифрованное:
1029384756
Вот как ты расшифровал:
1234509876
Вот как надо:
1234567890
Надо чётные записывать с конца!

H@NON 11.12.2007 22:44

Re: Abracodabra#
 
а ,нуда, извиняюсь.
Код:

...
for m = lenght to 2 lenght Step -2
    a$ = mid(shifrslovo$, m, 1)
    iskomoeslovo$=iskomoeslovo$+a$
next


Alex_90 16.12.2007 17:33

Re: Abracodabra#
 
Только вот длина слова (без решетки) бывает разная: по числу символов и по четности или нечетности этого числа.
Проверка же идет не только по этому слову, ну и по любому другому, зашифрованному этим способом. Если число символов нечетное, то символ, расположенный (d div 2) будет потерян.:)
Первая часть кода однозначно будет выглядеть так:
Цитата:

uses crt;
var
s:string[21];
s1:string[20];
d:integer;
...
begin
clrscr;
readln (s);
d:=length (s);
delete (s,d,1);
...

Tadeus 16.12.2007 18:52

Re: Abracodabra#
 

А меня вот собираються тож на олимпиаду послать. Заставят, млин, на паскале решать. Мы его в школе учим, я его ненавижу. Вот бы на КуБасике можно было)

H@NON 16.12.2007 20:34

Re: Abracodabra#
 
эх... вот вам исправленный вариант, надеюсь теперь все верно:
Код:

const shifrslovo$
global iskomoeslovo$

lenght = len(shifrslovo$)
for n = 1 to lenght Step 2
    a$ = mid(shifrslovo$, n, 1)
    iskomoeslovo$=iskomoeslovo$+a$
next

d# = lenght Mod 2
if d#<>0 then lenght2=lenght-1 Else lenght2=lenght

for m = lenght2 to 2 Step -2
    a$ = mid(shifrslovo$, m, 1)
    iskomoeslovo$=iskomoeslovo$+a$
next

Print iskomoeslovo$


Alex_90 16.12.2007 20:53

Re: Abracodabra#
 
Это на бейсике?;)
Буду переводить на Pascal или С++...:)

Fla 25.12.2007 16:14

Re: Abracodabra#
 
Москва? Торту такую давали, я не пошол, т.к. не хотел в каникулы переться в москву на какую-то 5 часовую олимпиаду...

Alex_90 25.12.2007 23:31

Re: Abracodabra#
 
Моя была 3 часовая!:)

dector 25.12.2007 23:32

Re: Abracodabra#
 
Ну да - старичкам трудновато далеко перебиратся) В твои-то 82..;)

у нас по закону 5 часов.
но гады сказали что 1 час идет на набор программ - я в шоке! и забрали у нас час.

Fla 25.12.2007 23:55

Re: Abracodabra#
 
Укуреные идиоты, как можно решать задачи на листочке? Без дебагера, без возможности проверки работоспособности.

*Все это идет, что бы своих протолкнуть. А делается это элементарно - комуто ставятся ',' и ';' лишние, а комуто тупо пишут.
**Такова жизнь

dector 26.12.2007 00:08

Re: Abracodabra#
 
Да не думаю что кто-то своих пропихает.а может...

Цитата:

Укуреные идиоты, как можно решать задачи на листочке? Без дебагера, без возможности проверки работоспособности.
Ты к чему клонишь?:wild:
Если ты про них - то я согласен немного.Ведь мы не пишем программу на листочке. А потом вводим. Это смешно - олимпиада по информатике на бумажке всеравно что конкурс вышивания без иголки с ниткой и ткани):mda:

Fla 26.12.2007 00:33

Re: Abracodabra#
 
Конечно же про организаторов.


Часовой пояс GMT +4, время: 01:08.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot