Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.03.03;
Скачать: CL | DM;

Вниз

Ребята, помогите пожалуйста решить задачу на паскале! Очень надо!   Найти похожие ветки 

 
Lex ©   (2003-02-20 15:00) [0]

Я бы может и сам смог, но у меня очень мало времени (вместе с этой мне нужно решить еще 7 задач) и я не знаю как организовать перебор арифметических операций над числами... Эта задача, кстати, считается самой легкой, но мне просто не хватает паскалевских знаний
Вот ее полный текст:
В написанном выражении ((((1?2)?3)?4)?5)?6 вместо каждого знака ? вставить знак одной из 4 арифметических операций +,-,*,/ так, чтобы результат вычислений равнялся 35 (при делении дробная часть в частном отбрасывается). Найти все решения.
P.S. Если кому-то хочется мне еще помощь, то я могу выслать текст остальных задач на e-mail


 
roadrunner   (2003-02-20 15:47) [1]

Парсинг строк с заменой символов ? на операторы и полный перебор с получением результатов.Извини времени нет привести пример


 
Lex ©   (2003-02-20 16:46) [2]

Что такое парсинг и как его реализовать?


 
Anatoly Podgoretsky ©   (2003-02-20 16:50) [3]

Тоже времени нет, но это разбор


 
Lex ©   (2003-02-20 17:39) [4]

Да что же вы все такие занятые!!! Ставлю пиво тому, кто решит эту задачу, за вами остается только доставка в ваш регион


 
Sha ©   (2003-02-20 17:48) [5]

Решу. За тобой доставка решения в свой регион.


 
han_malign ©   (2003-02-20 17:53) [6]

если именно такое выражение, то никакого разбора, а простой перебор

program Qqq;
{$APPTYPE CONSOLE}
function Immersion(Depth: integer; aOp: string; aValue: integer):string;
begin
if(aDepth<6)then begin
Result:=Immersion(aDepth+1,aOp+"+",aDepth+(aDepth+1));
Result:=Result+Immersion(aDepth+1,aOp+"-",aDepth-(aDepth+1));
Result:=Result+Immersion(aDepth+1,aOp+"*",aDepth*(aDepth+1));
Result:=Result+Immersion(aDepth+1,aOp+"/",aDepth div(aDepth+1));
end else
if(aValue=35)then Result:=aOp+";"
else Result:="";
end;
begin
Writeln(Immersion(1,"",1));
end;

- если конечно задача на рекурсию, а не на вложенные циклы и case


 
han_malign ©   (2003-02-20 18:18) [7]

З.Ы. Пива не надо - лучше ганджубас :)))


 
Lex ©   (2003-02-20 18:25) [8]

han_malign > "- если конечно задача на рекурсию, а не на вложенные циклы и case"
главное решить - почти все равно как. Но приведенное выше решение у меня высвечивает только черный экран консоли... Не работает...



 
Lex ©   (2003-02-20 19:32) [9]

ну же, постарайтесь плиз


 
Shc   (2003-02-20 20:47) [10]

По мне, дык тут натуральная рекурсия и есть. (успею попробую написать код)


 
Lex ©   (2003-02-20 20:54) [11]

Все, решил я эту задачу и без вас. Придется пиво одному пить :)
Shc > напиши мне, пожалуйста, свое решение. А то я никак не могу понять как работает эта рекурсия...


 
Aramis   (2003-02-20 21:15) [12]

Поставь Ящик пиво, решу задачи, идет?


 
Anatoly Podgoretsky ©   (2003-02-20 21:18) [13]

В следующий раз пиво вперед.


 
Shc   (2003-02-20 22:00) [14]

Лови.
Хотя я не понимаю чем тебя не устраивает решение han_malign.

program FindOperators;
{$APPTYPE CONSOLE}

procedure FindRes(k: byte; s: real; st: String);
begin
If k > 6 Then Exit;
If (s = 35) and (k=6) Then writeln(st);
FindRes(k + 1, s + k + 1, "(" + st + "+" + IntToStr(k + 1) + ")");
FindRes(k + 1, s - (k + 1), "(" + st + "-" + IntToStr(k + 1) + ")");
FindRes(k + 1, s * (k + 1), "(" + st + "*" + IntToStr(k + 1) + ")");
FindRes(k + 1, s / (k + 1), "(" + st + "/" + IntToStr(k + 1) + ")");
{или же , если все в целых числах, вместо деления FindRes(k + 1, s div (k + 1), "(" + st + "/" + IntToStr(k + 1) + ")"); }
end;

BEGIN
FindRes(1, 1, "1");
END.


правда писал без Делфя.

Если же числа не имеют какого-либо порядка, то заганяешь их в массив dig: array [1..n] of byte;, например, а потом в процедуре вместо 6 подставляешь n, а вместо k+1 везде dig[k+1].

ЗЫ. Если же есть отличная от указанной вложенность скобок, например, (а?ь)?(с?х), то тогда рекурсией меняешь "?" на возможные операторы, и для каждого варианта эту строку вычисляешь (парсишь) (тоже рекурсия, или спец. компоненты).


 
___ALex___ ©   (2003-02-21 15:37) [15]

program Qqq;
{$APPTYPE CONSOLE}
function Immersion(Depth: integer; aOp: string; aValue: integer):string;
begin
if(aDepth<6)then begin
Result:=Immersion(aDepth+1,aOp+"+",aValue+(aDepth+1));
Result:=Result+Immersion(aDepth+1,aOp+"-",aValue-(aDepth+1));
Result:=Result+Immersion(aDepth+1,aOp+"*",aValue*(aDepth+1));
Result:=Result+Immersion(aDepth+1,aOp+"/",aValue div(aDepth+1));
end else
if(aValue=35)then Result:=aOp+";"
else Result:="";
end;
begin
Writeln(Immersion(1,"",1));
end;

вот иправленная версия одного из предыдущих авторов решения



Страницы: 1 вся ветка

Текущий архив: 2003.03.03;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.027 c
14-5860
KA_
2003-02-12 11:12
2003.03.03
Оператор?..


3-5414
georges
2003-02-12 16:09
2003.03.03
Существуют ли в Paradox времмненые таблицы


3-5382
Rule
2003-02-11 23:04
2003.03.03
Вопрос по Интербейз и подключение из Интернета.


7-5878
Dabus
2003-01-03 07:34
2003.03.03
Большие массивы


6-5682
2Ksion
2003-01-11 19:06
2003.03.03
TWebBrowser