Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.03.2015, 23:08   #1
VladKB1
Форумчанин
 
Регистрация: 21.05.2014
Сообщений: 121
Вопрос Первоклассный хакер (TurboPascal)

Всем привет!

Я хочу что бы вы посмотрели на мою задачу и сказали нет ли в ней подвоха? А то я решил, а чувство какое-то не то... И протестировать смогу только в пятницу (я хочу что бы сразу прошли все тесты ).


Первоклассный хакер

Агенту Даниилу дали задание по взлому вражеской организации.
С помощью своего недюжинного обаяния агенту Даниилу удалось выяснить, что паролем от
вражеской базы данных является максимальное число, которое можно составить из n чисел.
Но агент Даниил понял, что сам не справится, поэтому он обращается к вам за помощью.
Вам даны n чисел, из которых нужно составить корректный пароль.

Формат ввода: в первой строке входного файла находится целое число n(n ≤ 250). Далее - n
строк, в каждой из которых находится одно число a[i], которое является частью пароля.
Формат вывода: одно число – ответ на задачу. Не добавляйте перевод строки в конце числа.

genpass.in
3
348
352
1

passgen.out
3523481


Вот код:

Код:
var
 n,i,j: integer;
 s: array [1..250] of string;
 password,st: string;
begin
 assign(input,'passgen.in');
 reset(input);
 assign(output,'passgen.out');
 rewrite(output);

 readln(n);
 for i:=1 to n do readln(s[i]);

 for i:=1 to n do
 for j:=i to n do
 if s[j] > s[i] then
 begin
  st:='';
  st:=st+s[j];
  s[j]:='';
  s[j]:=s[j]+s[i];
  s[i]:='';
  s[i]:=s[i]+st;
 end;

 for i:=1 to n do password:=password+s[i];
 write(password);
end.
Всем заранее спасибо!
VladKB1 вне форума Ответить с цитированием
Старый 12.03.2015, 03:35   #2
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

я тебе 2 секрета открою.
  1. переменные могут иметь имена длинее 1 буквы;
  2. в программу можно вставлять комментарии.
обязательно пользуйся этими 2-мя секретами, прежде чем показать свой говнокод людям.
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 12.03.2015, 07:22   #3
crazy horse
ios developer
Старожил
 
Аватар для crazy horse
 
Регистрация: 16.11.2007
Сообщений: 2,885
По умолчанию

2min@y™ Я тебе тоже секрет открою. Советы могут быть развернутыми. Две одинаковые буквы так же длиннее одной. Если уж так не терпится дать совет, стоит подумать, а не большее ли он говно, чем приложенный код, который, собственно, и не претендует на какие-то изыски изначально. В данном же случае, это просто высер. Что касается топикстартера, то его вопрос, вообще-то, чуть ли не образцовый.
Делайте что хотите, но чтобы через полчаса в лесу было светло, сухо и медведь!

Последний раз редактировалось crazy horse; 12.03.2015 в 07:26.
crazy horse вне форума Ответить с цитированием
Старый 12.03.2015, 07:27   #4
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

Цитата:
st:='';
st:=st+s[j];
А ты знаешь, что можно сделать сразу так : st := s[j];

И еще.. Я уверен, что этот код не правильный (уж пардон).. Доказать смогу вечером..

А вот тыц

Последний раз редактировалось Poma][a; 12.03.2015 в 07:32.
Poma][a вне форума Ответить с цитированием
Старый 12.03.2015, 13:22   #5
VladKB1
Форумчанин
 
Регистрация: 21.05.2014
Сообщений: 121
По умолчанию

Цитата:
Сообщение от Poma][a Посмотреть сообщение
А ты знаешь, что можно сделать сразу так : st := s[j];

И еще.. Я уверен, что этот код не правильный (уж пардон).. Доказать смогу вечером..

А вот тыц
Неа так сразу сделать нельзя, потому что при повторном присваивании предыдущие число останется (наверно так только в TurboPascal-е).

А тут же вроде правильно? Я прав? Там написано составить максимальное число из чисел.
stdin
4
10000
9
1000001
3

stdout
93100000110000

Последний раз редактировалось VladKB1; 12.03.2015 в 13:26.
VladKB1 вне форума Ответить с цитированием
Старый 12.03.2015, 13:53   #6
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
93100000110000
stdout
93100001000001 > 93100000110000
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 12.03.2015, 14:22   #7
VladKB1
Форумчанин
 
Регистрация: 21.05.2014
Сообщений: 121
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
stdout
93100001000001 > 93100000110000
Всё понял, спасибо. Блин, и как это исправить? Тут должно быть лексикографическое сравнение? Так же? Короче как мне это исправить?
VladKB1 вне форума Ответить с цитированием
Старый 12.03.2015, 14:38   #8
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

Про турбо : ставлю кошоладку, что ты не прав. Докажу только через 3ч.
Про задачу : опять же, тут очень хорошо смотрелась бы функция.
Можно сделать так : ждать китов форума.. Они при думают вариант с обычным (правда насовсем) сравнением строк..
Можешь поискать по форуму.. Такая тема точно была.. Там заправлял eoln
А можешь.. Ты должен правильно сравнивать строки.. Пока могу предложить такой вариант : заводим две новые переменные, присваиваемое им значения ai и aj.. И ещё m := max(длина ai, длина aj).. И добивает строки до длины m нулями..дальше можно сравнивать уже по обычному
Poma][a вне форума Ответить с цитированием
Старый 12.03.2015, 16:13   #9
VladKB1
Форумчанин
 
Регистрация: 21.05.2014
Сообщений: 121
По умолчанию

Цитата:
Сообщение от Poma][a Посмотреть сообщение
Про турбо : ставлю кошоладку, что ты не прав. Докажу только через 3ч.
Про задачу : опять же, тут очень хорошо смотрелась бы функция.
Можно сделать так : ждать китов форума.. Они при думают вариант с обычным (правда насовсем) сравнением строк..
Можешь поискать по форуму.. Такая тема точно была.. Там заправлял eoln
А можешь.. Ты должен правильно сравнивать строки.. Пока могу предложить такой вариант : заводим две новые переменные, присваиваемое им значения ai и aj.. И ещё m := max(длина ai, длина aj).. И добивает строки до длины m нулями..дальше можно сравнивать уже по обычному
Про поскаль я уверен, что я прав. Короче посмотрим
Идея с нулями мне нравится, использую её. Но код напишу попозже (скорее всего завтра). В какой раз большое вам спасибо!
VladKB1 вне форума Ответить с цитированием
Старый 12.03.2015, 16:32   #10
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

Ну вот, например :
Изображения
Тип файла: jpg forum.jpg (62.0 Кб, 116 просмотров)
Poma][a вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Хакер-тайпер Сtrl Свободное общение 14 17.01.2012 07:08