Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2003.03.03;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.6 MB
Время: 0.046 c
9-5368
Cold_AYS
2002-10-01 19:46
2003.03.03
Заголовочные С файлы Half-Life SDK


14-5726
Anatoly Podgoretsky
2003-02-15 11:03
2003.03.03
Именинники 15 февраля


3-5455
mate
2003-02-13 15:43
2003.03.03
Номер записи


14-5731
Muxaul
2003-02-15 13:01
2003.03.03
Работа с файлами


1-5529
Николай В.
2003-02-13 15:23
2003.03.03
Создание Help.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский