Автор Тема: помогите с задачами по программированию  (Прочитано 4278 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Gargolev

  • Пользователь
  • Сообщений: 371
  • Пол: Мужской
    • Просмотр профиля
задачи:
http://acm.bsuir.by/m/12_0_1_59883.zip

Первая задача решена.

Языки - паскаль и С/С++ю
Среды:
- Microsoft Visual C++ версии не ниже 6.0
- Borland C++ Builder
- Borland Delphi версии не ниже 6
- ессна борланд и турбо среды

если не можете написать саму программу, то выложите здесь хотя бы идею решения задачи

актуально до 8 апреля включительно
« Последнее редактирование: 05 Апрель 2009, 01:13:44 от Gargolev »

Оффлайн 3DSchumacher

  • Ушел с форума
  • Сообщений: 2164
  • Пол: Мужской
    • Просмотр профиля
Re: помогите с задачами по программированию
« Ответ #1 : 04 Апрель 2009, 00:42:59 »
Тебе все нужны? И на когда? И на чем писать, или пофиг?

Оффлайн HoRRoR

  • Пользователь
  • Сообщений: 983
  • Пол: Мужской
  • Ромхакер
    • Просмотр профиля
Re: помогите с задачами по программированию
« Ответ #2 : 04 Апрель 2009, 00:45:57 »
Язык какой? И задачи для олимпиады?
Ненавижу подобного рода задания, их составителей кастрировать надо. Всегда самой сложной частью тут было понять, чего хотят эти укурки. А ограничения и способы проверки наитупейшие (время выполнения программы зависит не только от программы). Помнится, на одной серьёзной олимпиаде вся автоматическая система проверки полетела к чертям. Да и объективности у неё было НОЛЬ, ибо единственно верным ответом был ответ, который нашёл составитель (убил бы, ибо, во-первых, в некоторых случаях вариантов решения может быть несколько, во-вторых, автор не всегда обязан быть прав).

Оффлайн 3DSchumacher

  • Ушел с форума
  • Сообщений: 2164
  • Пол: Мужской
    • Просмотр профиля
Re: помогите с задачами по программированию
« Ответ #3 : 04 Апрель 2009, 00:50:07 »
В третьих - олимпиады сами по себе - сакс :) (ИМХО). Хотя задания то элементарные, по 5 минут на каждую, причем я бы даже писал их на чем-нибудь простеньком, типа бейсика, чтобы не грузить лишний раз ту-же студию, ато она грузиться долше чем надо для написания такой простой проги :) .

Оффлайн HoRRoR

  • Пользователь
  • Сообщений: 983
  • Пол: Мужской
  • Ромхакер
    • Просмотр профиля
Re: помогите с задачами по программированию
« Ответ #4 : 04 Апрель 2009, 00:51:38 »
Меньше слов - больше дела. А писать в студии никто не заставляет, есть куча других сред. Да и на бейсике с его немощностью надо приложить гораздо больше усилий для реализации.

Оффлайн 3DSchumacher

  • Ушел с форума
  • Сообщений: 2164
  • Пол: Мужской
    • Просмотр профиля
Re: помогите с задачами по программированию
« Ответ #5 : 04 Апрель 2009, 00:56:18 »
Цитата
Да и на бейсике с его немощностью надо приложить гораздо больше усилий для реализации.
Ну ваще бейсики разные бывают, DarkBasicPro и BlitzBasic для таких простых вещей - в самый раз.
Цитата
Меньше слов - больше дела.
А что, уже начинать писать? Еще ж не ясно на чем, пусть автор ответит хотябы на мои вопросы.

Оффлайн HoRRoR

  • Пользователь
  • Сообщений: 983
  • Пол: Мужской
  • Ромхакер
    • Просмотр профиля
Re: помогите с задачами по программированию
« Ответ #6 : 04 Апрель 2009, 00:59:48 »
Ну ваще бейсики разные бывают, DarkBasicPro и BlitzBasic для таких простых вещей - в самый раз.
Бейсик в любом случае бейсиком останется. Хоть Dark, хоть Light, хоть SuperMegaForce.

А что, уже начинать писать? Еще ж не ясно на чем, пусть автор ответит хотябы на мои вопросы.
Ну раз слова и уверенность в своих силах пошли, зачем же само дело то придерживать?

Оффлайн 3DSchumacher

  • Ушел с форума
  • Сообщений: 2164
  • Пол: Мужской
    • Просмотр профиля
Re: помогите с задачами по программированию
« Ответ #7 : 04 Апрель 2009, 01:01:44 »
Цитата
Ну раз слова и уверенность в своих силах пошли, зачем же само дело то придерживать?
Чтобы потом не оказалось что все на смарку, а прогу надо было писать на каком-нибудь турбопаскале :). Но видимо не судьба, поскольку всю ноч ждать я не смогу...

Оффлайн Gargolev

  • Пользователь
  • Сообщений: 371
  • Пол: Мужской
    • Просмотр профиля
Re: помогите с задачами по программированию
« Ответ #8 : 04 Апрель 2009, 15:38:07 »
Языки - паскаль и С/С++ю
Среды:
- Microsoft Visual C++ версии не ниже 6.0
- Borland C++ Builder
- Borland Delphi версии не ниже 6
- ессна борланд и турбо среды

P.S. первая задача решена. Осталось проверить ток, насколько быстро будет работать.

Оффлайн HoRRoR

  • Пользователь
  • Сообщений: 983
  • Пол: Мужской
  • Ромхакер
    • Просмотр профиля
Re: помогите с задачами по программированию
« Ответ #9 : 04 Апрель 2009, 18:06:56 »
Задача 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, если возможно - минимальное количество операций.
Считывание из файла и запись результатов не прикручивал.
« Последнее редактирование: 04 Апрель 2009, 18:14:57 от HoRRoR »

Оффлайн Gargolev

  • Пользователь
  • Сообщений: 371
  • Пол: Мужской
    • Просмотр профиля
Re: помогите с задачами по программированию
« Ответ #10 : 05 Апрель 2009, 02:12:53 »
HoRRoR,спсибо конечно, но скорее всего следующее число получается из предыдущих. Насчет возможности/невозможности у меня была мысль - если бы можно было вначале уменьшать получаемые результаты, пока они >= искомого, потом пытаться увеличить, пока они <= искомого. А насчет когда из одного числа получается другое - создаем массив или список или дерево чисел, получаемых на каждом шаге, причем каждое An+1=An#Ak, где 0<k<n. Но все это только идеи

Добавлено позже:
Задача С вродь решается так?
для каждого столбца и строки находится сумма их чисел - тож два двумерных массива (числа длинные и записываются в столбик), далее эти массивы сортируются. Потом вычеркиваются последние строки в одном - до тех пор, пока это выгодно. Далее пробуем удалить строки из второго массива до тех пор, пока это выгодно. Потом по одной возвращаем строки в первом и пробуем удалить дополнительные строки во втором - сравнивая результаты с минимальным полученным.
Остается определить оптимальную величину индексов массивов.