![]() |
Модераторы: Poseidon |
![]() ![]() ![]() |
|
Venom88 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 4.5.2008 Репутация: -1 Всего: нет |
помогите решить.....
Двузначные номера. Каждую букву исходного сообщения заменили её порядковым двузначным номером в русском алфавите согласно таблице: а б в г д е ё ж з и й 01 02 03 04 05 06 07 08 09 10 11 к л м н о п р с т у ф 12 13 14 15 16 17 18 19 20 21 22 х ч ц ш щ ъ ы ь э ю я 23 24 25 26 27 28 29 30 31 32 33 Полученную цифровую последовательность разбили (справа налево) на трехзн. Цифровые группы без пересечений и пропусков. Затем каждое из полученных трехзначных чисел умножили на 77 и оставили только три последние цифры произведения. В результате получилось последовательность цифр: 317564404970017677550547850355. |
|||
|
||||
Venom88 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 4.5.2008 Репутация: -1 Всего: нет |
надо расшифровать и зашифровать.....я вроде это написал, присвоил каждой букве алфавита ее порядковый номер!! но вроде получилась одна фигня....может кто поможет решить(объеснить) эту задачку....
|
|||
|
||||
mmvds |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 230 Регистрация: 22.12.2007 Репутация: нет Всего: 6 |
1) Разбиваем исходную последовательность на трехзначные числа
2) Для каждого из них перебором находим такие две первых цифры (от 00 до 99) чтоб полученное число делилось без остатка на 77 3) Делим полученные числа на 77 4) Приводим частные к трехзначной длинне и соединяем в одну последовательность 5) Разбиваем полученную последовательность по две цифры 6) Подставляем согласно алфавиту каждому номеру буквы Начни делать, потом скажешь на каком этапе помочь. |
|||
|
||||
Beltar |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 627 Регистрация: 11.1.2006 Репутация: нет Всего: 7 |
Зачем? Составить просто таблицу последних трех цифр x*77 для всех 100<=x<=999 и по ней искать все. -------------------- Опытный программист на C++ легко решает любые не существующие в Паскале проблемы. ![]() Пищущий на C++ мужик. Даже если это мужик сидит в написанном на Delphi и жрущем паскалевскую библиотеку билдере. |
|||
|
||||
mmvds |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 230 Регистрация: 22.12.2007 Репутация: нет Всего: 6 |
В этом случае перебор будет из 899=999-100 вариантов для каждого числа, в моем случае всего 99 вариантов, хотя у будет еще взятие остатка. В общем тут спорно, что будет работать быстрее. Да и в памяти мне понадобится всего 2 целочисленных переменных, вам 900. И кстати тогда уж от 000 (если одного символа до трех знаков не хватило, а следующий за ним начинается с 0) до 933 Это сообщение отредактировал(а) mmvds - 5.5.2008, 09:18 |
|||
|
||||
Beltar |
|
||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 627 Регистрация: 11.1.2006 Репутация: нет Всего: 7 |
Т. е. от 001 до 999 даже.
Я предлагаю посчитать
Погодите. Для меня пока вопрос стоит не в скорости, а в том, что вы хотите получить. Я не понимаю предложенный алгоритм.
Какие 2 цифры? Какое число? Ну допустим я взял слово "ас", последовательность "0119" Берем группы по 3 цифры "011", "900" Что дальше с ними делать? -------------------- Опытный программист на C++ легко решает любые не существующие в Паскале проблемы. ![]() Пищущий на C++ мужик. Даже если это мужик сидит в написанном на Delphi и жрущем паскалевскую библиотеку билдере. |
||||||
|
|||||||
mmvds |
|
||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 230 Регистрация: 22.12.2007 Репутация: нет Всего: 6 |
Внимательнее читайте условие:
Шифрование: для данного примера "ас" "0119" разбиваем по 3 цифры будет "000" "119" т.к. разбиваем СПРАВА налево, далее нам нужно умножить эти числа на 77, оставляем 3 последних цифры "000" "163", получим нужную последовательность 000163 Расшифровка по моему алгоритму: последовательность: 000163 1) Разбиваем исходную последовательность на трехзначные числа 000 163 2) Для каждого из них перебором находим такие две первых цифры (от 00 до 99) чтоб полученное число делилось без остатка на 77 00 000 mod 77=0 09 163 mod 77=0 3) Делим полученные числа на 77 000 119 4) Приводим частные к трехзначной длинне и соединяем в одну последовательность 000119 5) Разбиваем полученную последовательность по две цифры 00 01 19 6) Подставляем согласно алфавиту каждому номеру буквы ас 2 цифры, потому что трехзначное*77=пятизначное, три цифры у нас есть, две остальные находим перебором. |
||||
|
|||||
mmvds |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 230 Регистрация: 22.12.2007 Репутация: нет Всего: 6 |
Button1- кнопка, Edit1 - вводим шифрованный текст Edit2 - сюда выведется расшифрованный текст Проверил работу программы на коде из условия: 317564404970017677550547850355 Результат строка: ключшифранайден Это сообщение отредактировал(а) mmvds - 5.5.2008, 15:57 |
|||
|
||||
Venom88 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 4.5.2008 Репутация: -1 Всего: нет |
спасибо...
|
|||
|
||||
![]() ![]() ![]() |
Правила форума "Центр помощи" | |
|
ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Более подробно с правилами данного раздела Вы можете ознакомится в этой теме. Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Центр помощи | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |