Ich habe eine Lösung für this competitive programming problem 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 jeder in der Gruppe innerhalb eines Pennys in Reichtum ist?Fehler in einem Programm, das Reichtum in einer Gruppe ausgleicht (UVA 10137, "The Trip")
Mein Programm ist einfach. Ich änderte es für den Betrieb nur auf eine Reihe von, wie viele Pfennige jeder hat:
def transfer(A):
A.sort(key = lambda x:-x)
extra = sum(A) % len(A)
average = sum(A) // len(A)
high = sum([abs(x - (average+1)) for x in A[:extra]])
low = sum([abs(x - average) for x in A[extra:]])
return (high+low)/2
Der Testfall, dass es nicht auf die folgenden:
print(transfer([613, 944, 7845, 8908, 12312, 22378, 27877, 54757, 55476, 90707, 91289, 178189]))
Mein Code sagt, die Antwort ist 240710
, während Die "richtige" Antwort ist 240709
. Wo ist mein Käfer?
Ich bin geneigt zu denken, dass Sie tatsächlich einen Fehler irgendwo in der Dollar-> Pennies oder Pennies-> Dollar-Konvertierung aufgrund der Gleitkomma-Rundung hatten. – user2357112
Nein, der Testfall ist in Pennies ausgedrückt, und die falsche Antwort ist auch in Bezug auf Pennies. Danke aber :) –
Ich denke, es gibt keinen Fehler und Ihr Code ist korrekt – samgak