| Разработка и ромхакинг > Ромхакинг и программирование |
| помогите с задачами по программированию |
| (1/1) |
| Gargolev:
задачи: http://acm.bsuir.by/m/12_0_1_59883.zip Первая задача решена. Языки - паскаль и С/С++ю Среды: - Microsoft Visual C++ версии не ниже 6.0 - Borland C++ Builder - Borland Delphi версии не ниже 6 - ессна борланд и турбо среды если не можете написать саму программу, то выложите здесь хотя бы идею решения задачи актуально до 8 апреля включительно |
| 3DSchumacher:
Тебе все нужны? И на когда? И на чем писать, или пофиг? |
| HoRRoR:
Язык какой? И задачи для олимпиады? Ненавижу подобного рода задания, их составителей кастрировать надо. Всегда самой сложной частью тут было понять, чего хотят эти укурки. А ограничения и способы проверки наитупейшие (время выполнения программы зависит не только от программы). Помнится, на одной серьёзной олимпиаде вся автоматическая система проверки полетела к чертям. Да и объективности у неё было НОЛЬ, ибо единственно верным ответом был ответ, который нашёл составитель (убил бы, ибо, во-первых, в некоторых случаях вариантов решения может быть несколько, во-вторых, автор не всегда обязан быть прав). |
| 3DSchumacher:
В третьих - олимпиады сами по себе - сакс :) (ИМХО). Хотя задания то элементарные, по 5 минут на каждую, причем я бы даже писал их на чем-нибудь простеньком, типа бейсика, чтобы не грузить лишний раз ту-же студию, ато она грузиться долше чем надо для написания такой простой проги :) . |
| HoRRoR:
Меньше слов - больше дела. А писать в студии никто не заставляет, есть куча других сред. Да и на бейсике с его немощностью надо приложить гораздо больше усилий для реализации. |
| 3DSchumacher:
--- Цитата ---Да и на бейсике с его немощностью надо приложить гораздо больше усилий для реализации. --- Конец цитаты --- Ну ваще бейсики разные бывают, DarkBasicPro и BlitzBasic для таких простых вещей - в самый раз. --- Цитата ---Меньше слов - больше дела. --- Конец цитаты --- А что, уже начинать писать? Еще ж не ясно на чем, пусть автор ответит хотябы на мои вопросы. |
| HoRRoR:
--- Цитата: 3DSchumacher от 04 Апрель 2009, 00:56:18 ---Ну ваще бейсики разные бывают, DarkBasicPro и BlitzBasic для таких простых вещей - в самый раз. --- Конец цитаты --- Бейсик в любом случае бейсиком останется. Хоть Dark, хоть Light, хоть SuperMegaForce. --- Цитата: 3DSchumacher от 04 Апрель 2009, 00:56:18 ---А что, уже начинать писать? Еще ж не ясно на чем, пусть автор ответит хотябы на мои вопросы. --- Конец цитаты --- Ну раз слова и уверенность в своих силах пошли, зачем же само дело то придерживать? |
| 3DSchumacher:
--- Цитата ---Ну раз слова и уверенность в своих силах пошли, зачем же само дело то придерживать? --- Конец цитаты --- Чтобы потом не оказалось что все на смарку, а прогу надо было писать на каком-нибудь турбопаскале :). Но видимо не судьба, поскольку всю ноч ждать я не смогу... |
| Gargolev:
Языки - паскаль и С/С++ю Среды: - Microsoft Visual C++ версии не ниже 6.0 - Borland C++ Builder - Borland Delphi версии не ниже 6 - ессна борланд и турбо среды P.S. первая задача решена. Осталось проверить ток, насколько быстро будет работать. |
| HoRRoR:
Задача F: --- Цитата ---program F; {$DEFINE DEBUG} {$IFDEF DEBUG} {$APPTYPE CONSOLE} {$ENDIF} Function Calc(V1, V2: Integer): Integer; var Sum, V, Max, Min, n: Integer; begin Sum := 0; While V1 <> 0 do begin Sum := Sum + (V1 mod 10); V1 := V1 div 10; end; Max := Low(Integer); Min := High(Integer); If V2 = 0 Then begin Min := 0; Max := 0; end; While V2 <> 0 do begin V := V2 mod 10; If V > Max Then Max := V; If V < Min Then Min := V; V2 := V2 div 10; end; Result := Sum * Max + Min; end; const LIMIT = 16; var Min: Integer; {$IFDEF DEBUG} MinStr: String; {$ENDIF} Function Find(V1, Res: Integer; V2: Integer = -1; Num: Integer = 0{$IFDEF DEBUG}; DbgStr: String = 'a'{$ENDIF}): Integer; var R1, R2: Integer; begin If V2 = -1 Then V2 := V1; If Num = 0 Then Min := LIMIT; If Num > Min Then begin Result := -1; Exit; end; If V1 = Res Then begin Result := Num; If Num <= Min Then Min := Num - 1; {$IFDEF DEBUG} MinStr := DbgStr; {$ENDIF} Exit; end; R1 := Find(Calc(V1, V2), Res, V2, Num + 1{$IFDEF DEBUG}, '(' + DbgStr + '#a)'{$ENDIF}); R2 := Find(Calc(V2, V1), Res, V2, Num + 1{$IFDEF DEBUG}, '(a#' + DbgStr + ')'{$ENDIF}); If ((R1 >= R2) or (R1 = -1)) and (R2 <> -1) Then Result := R2 else Result := R1; end; begin {$IFDEF DEBUG} WriteLn(Find(718, 81), #13#10, MinStr); ReadLn; {$ENDIF}; end. --- Конец цитаты --- Идёт тупо перебор всех вариантов. Не знаю, как определить, возможно ли получить из одного числа другое, поэтому получение считается невозможным при достижении лимита операций (const LIMIT). Если невозможно - функция возвращает -1, если возможно - минимальное количество операций. Считывание из файла и запись результатов не прикручивал. |
| Gargolev:
HoRRoR,спсибо конечно, но скорее всего следующее число получается из предыдущих. Насчет возможности/невозможности у меня была мысль - если бы можно было вначале уменьшать получаемые результаты, пока они >= искомого, потом пытаться увеличить, пока они <= искомого. А насчет когда из одного числа получается другое - создаем массив или список или дерево чисел, получаемых на каждом шаге, причем каждое An+1=An#Ak, где 0<k<n. Но все это только идеи Добавлено позже: Задача С вродь решается так? для каждого столбца и строки находится сумма их чисел - тож два двумерных массива (числа длинные и записываются в столбик), далее эти массивы сортируются. Потом вычеркиваются последние строки в одном - до тех пор, пока это выгодно. Далее пробуем удалить строки из второго массива до тех пор, пока это выгодно. Потом по одной возвращаем строки в первом и пробуем удалить дополнительные строки во втором - сравнивая результаты с минимальным полученным. Остается определить оптимальную величину индексов массивов. |
| Навигация |
| Главная страница сообщений |