Текущий архив: 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.48 MB
Время: 0.009 c