Fehler in einem Programm, das Reichtum in einer Gruppe ausgleicht (UVA 10137, "The Trip")

9

Ich habe eine Lösung für dieses wettbewerbsfähige Programmierproblem geschrieben. Es hat alle Testfälle bestanden, außer dass es für den letzten Fall um eins ging, und ich kann nicht herausfinden warum. Das Problem kann wie folgt ausgedrückt werden: Wie viele Cent muss jede Person in einer Gruppe haben, wie viel Geld muss sie wechseln, damit alle in der Gruppe innerhalb eines Pennys voneinander in Reichtum sind?

Mein Programm ist einfach. Ich habe es so modifiziert, dass es nur auf einer Reihe von Pfennigen funktioniert, die jeder hat:

%Vor%

Der Testfall, bei dem er fehlschlägt, ist der folgende:

%Vor%

Mein Code sagt, dass die Antwort 240710 ist, während die "richtige" Antwort 240709 ist. Wo ist mein Fehler?

    
René G 12.02.2017, 21:38
quelle

2 Antworten

0

Der Konsens scheint zu sein, dass der Grund, warum ich eine andere Antwort erhielt, ist, dass ich ausschließlich ganzzahlige Arithmetik verwende und ihre Antwort Float-Arithmetik verwendet. Während ihr Algorithmus in unendlicher Genauigkeit korrekt sein würde, stellt sich heraus, dass in diesem Fall, durch einen seltsamen Zufall, die Ungenauigkeit des Floats einen "Off-by-One" ergibt. Dies wird durch gcc kompilierenden Code verifiziert, der eine andere Antwort als meine gibt, aber clang kompilierenden Code, der die gleiche Antwort gibt, die ich gefunden habe.

    
René G 08.03.2017, 00:02
quelle
-1

Das Programmierproblem besagt:     Ihre Aufgabe ist es, aus einer Liste von Ausgaben den Mindestbetrag von Geld, das den Besitzer wechseln muss, um die Kosten aller Studenten (innerhalb eines Centes) auszugleichen.

Das ist nicht dasselbe wie jeder, der in einem Penny den gleichen Reichtum hat. Es bedeutet, dass jeder Geldwechsel in einem Penny sein sollte. Schlechte Formulierung, mit einiger Verwirrung über die Interpretierbarkeit. Aber lass uns damit gehen.

Es gibt fünf Personen, die über dem Durchschnittswert von 45941,25 liegen. Sie sind die Leute, die den anderen das Geld geben. Aber wenn es weniger als einen Cent gibt, müssen sie diesen Bruchteil-Cent nicht geben. Um herauszufinden, wie viele Personen keinen zusätzlichen Cent abgeben müssen:

%Vor%

final = initial - difference . Bei der Überprüfung liegen die final -Werte innerhalb des Ein-Penny-Kriteriums.

%Vor%

Die fünf Leute, die zu viel Geld haben, geben [132247, 45347, 44765, 9534, 8815] Pennies weg und verlosen insgesamt 240708 cents . Es scheint gut zusammenzupassen.

Beachten Sie, dass es sich um einen niedrigeren Wert als die oben angegebene Lösung handelt!

    
Tom Anderson 14.02.2017 12:44
quelle