Что не так с этим алгоритмом? - PullRequest
0 голосов
/ 20 марта 2009

Это абстрактная форма ошибки, которая привела меня в код, который лег в основу моего предыдущего вопроса . Это становится очевидным, когда вы его видите, но несколько профессиональных программистов, знакомых с исходной проблемой и оригинальным языком, просмотрели код и пропустили ошибку, прежде чем мы ее обнаружили (по общему признанию, в ее родной среде она была ближе к трем страницам).

Пожалуйста запутывайте ваши ответы , чтобы опоздавшие тоже могли повеселиться.

most_bang_for_buck_score = 0.0
most_bang_for_buck_order = []
for appetizer in appetizers
    total_cost     = appetizer.cost
    total_calories = appetizer.calories
    for salad in salads
        total_cost     = total_cost     + salad.cost
        total_calories = total_calories + salad.calories
        for entree in entrees
            total_cost     = total_cost     + entree.cost
            total_calories = total_calories + entree.calories
            for desert in deserts
                total_cost     = total_cost      + desert.cost
                total_calories = total_calories + desert.calories
                if total_calories/total_cost > most_bang_for_buck_score
                    most_bang_for_buck_score = total_calories/total_cost
                    most_bang_for_buck_order = [appetizer,salad,entree,desert]
 print "You'll get the most food energy for your money ordering ",most_bang_for_buck_order,"\n"

Ответы [ 6 ]

6 голосов
/ 20 марта 2009

ROT13 (или наведите указатель мыши на эту ссылку, чтобы увидеть незапутанный ответ в виде всплывающей подсказки)

V qba'g guvax lbh'er erfrggvat gbgny_pbfg / gbgny_pnybevrf ba rnpu cnff. Lbh bhtug gb whfg или fhzzvat rirelguvat hc bapr va gur vaarezbfg ybbc.

Ол гур джнл лбх фнир гур бекре нф бар бс рнпу вгрз, в'з нфхзват лбх'р байл фхббфрк гб или униват бар бс рнпу сббг пнгртбель.

4 голосов
/ 20 марта 2009

Се рнпу вгрз (нкргвмре, фныньк, рагерр, црфрег) лбх'ер нккват гур пбфг бс гур ардж вгрз, огг лбхъер абг фхогенгват бхг гур пбфг бс гур фрнбз Guvf jvyy pnhfr lbh gb fhz gur gbgny pbfg bs nyy vgrzf va nyy pngrtbevrf, vafgrnq bs nyy pbzovangvbaf.

ROT13

2 голосов
/ 20 марта 2009

VF vg ерныл гувф рнфл? Lbh'er abg erfrggvat gbgny_pbfg be gbgny_pnybevrf va rnpu ybbc vgrengvba.

V pna frr ubj gur oht jbhyq или unsq gb fcbg ol ybbxvat ng gur bhgchg, gubhtu Gur engvb bs gur gjb inyhrf zvtug abg punatr zhpu rira nf gurve inyhrf terj ovttre.

ROT13, наведите указатель мыши, чтобы не скрыть всплывающую подсказку

1 голос
/ 27 апреля 2009

Итак, ответ ясен из других постов. Я просто собираюсь использовать это пространство, чтобы сделать это на функциональном языке (Haskell), где такого рода ошибки не происходят.

Просто получить максимальный балл легко, если принять во внимание списки (стоимость, калорийность) кортежей:

let bang (cost, cal) = cal / cost
 in maximum [bang c1 + bang c2 + bang c3 + bang c4 | 
                                 c1 <- appetizers,
                                 c2 <- salads,
                                 c3 <- entrees,
                                 c4 <- deserts]

Если вы представляете свои данные в виде кортежей (имя, (стоимость, калория)), то это более раздражает. Лучший способ - определить максимальную функцию, которая использует параметр «ключ», как в Python (возможно, он уже есть, но я не знаю об этом). Тогда вы просто сделаете это:

maximumkey snd [([n1, n2, n3, n4], bang c1 + bang c2 + bang c3 + bang c4) | 
                      (n1, c1) <- appetizers,
                      (n2, c2) <- salads,
                      (n3, c3) <- entrees
                      (n4, c4) <- deserts]

Для завершения решения. Вот как (примерно) определяется maximum:

maximum xs = foldl1 max xs

То есть maximumkey это:

maximumkey f xs = foldl1 (\(a,b) -> if (f a) > (f b) then a else b) xs

Примечание: это немного неэффективно, так как для каждого элемента вызывается 'f' более одного раза.

0 голосов
/ 28 марта 2009

Не уверен, как можно рассчитать количество калорий в пустыне, но я думаю, что оно будет невероятно маленьким по сравнению с его стоимостью, особенно в современной экономике, если предположить, что продается вся пустыня.

Предполагая, что total_calories и total_cost являются некими целочисленными типами данных, каждый most_bang_for_buck_score будет равен нулю.

Я предполагаю, что алгоритм всегда печатает первый элемент из каждого курса.

0 голосов
/ 20 марта 2009

V thrff nyy gur cebqhpgf fubhyq или grfgrq gbtrgure:

nccrgvmref ragerrf fnynqf * qrfregf = gbgny pbzcnevfbaf

юрерф вр фррзф ивкср гюрерф нюйнлф гур фнзр cebqhpg bs gur svefg vgrzf pbzcnerq gb rnpu bs gur qrfregf (v.r. 7 pbzcnevffaf sbe 7). vfa'g vg?

... znlor V whfg qba'g trg gur nofgenpgvba:)

ogj, guvf ebg13 fvgr vf terng:)

http://www.rot13.com/index.php

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...