Ich habe ein Abstimmungssystem für etwas, wo Leute Dinge von eins bis zehn bewerten. Ich bin in der Lage, die Anzahl der Gesamtstimmen zu erhalten, aber nicht ihre Verteilung. Ich kann jedoch auf die Summen für jede Punktzahl zugreifen (aber nicht für welche Punktzahl sie sind).Finden Sie Zahlen, die eine Liste von Zahlen multiplizieren
Zum Beispiel, sagen zwei Leute stimmten 2 und drei 4 dann würde ich [4, 12] bekommen. Menschlich ist es möglich, herauszufinden, was die Stimmen waren, aber da es viele Daten gibt, brauche ich einen Algorithmus, der es programmatisch machen kann. Um dies menschlich zu lösen, würde ich wissen, dass es 5 Stimmen gab und das würde ich wissen, dass es entweder eins vier oder vier oder zwei zwei und drei Vieren waren. Da dies nicht das beste Beispiel ist, können wir nicht sagen, welches es wäre und deshalb sollte der Algorithmus alle diese Lösungen ausspucken. Mit den realen Daten ist es sehr selten, dass so etwas auftritt.
Die Eingabe hat die Form eines int, das die Gesamtzahl der abgegebenen Stimmen darstellt, und eine Liste aller Zwischensummen der Abstimmung. Die Ausgabe sollte ein Array sein, das pars (x, y) enthält, wobei x Anzahl der abgegebenen y-Stimmen ist. Wenn mehr als eine Lösung vorhanden ist, sollte der Algorithmus alle in einem Array zurückgeben.
EDIT: Hier einige echte Daten (17 Personen stimmten):
Dunkel - 60 + 18 + 8 + 18 + 10 + 4 + 3 + 1 = 122
Satomi - 20 + 14 + 24 + 12 + 3 + 4 + 3 = 80
Bottersnike - 16 + 28 + 5 + 8 + 6 + 4 + 4 = 71
Woon - 40 + 36 + 8 + 21 + 5 + 16 = 126
Limelier - 10 + 18 + 6 + 15 + 8 + 4 + 6 = 67
RandomGamer - 16 + 6 + 10 + 4 + 6 + 4 + 7 = 53
Pillar - 10 + 8 + 21 + 6 + 15 + 4 + 9 + 4 + 2 = 79
EdgedPixel - 8 + 28 + 12 + 4 + 18 + 2 + 2 = 74
Lock - 20 + 24 + 7 + 18 + 10 + 8 + 6 + 2 = 95
Huri - 10 + 8 + 7 + 6 + 15 + 20 + 3 + 2 + 3 = 74
Sean - 18 + 32 + 8 + 5 + 4 + 9 + 2 = 78
Und die Antworten (sorry über die verschiedenen Reihenfolge):
Woon - 4*10 + 4*9 + 1*8 + 3*7 + 0*6 + 1*5 + 4*4 + 0*3 + 0*2 + 0*1 = 126
Dunkel - 6*10 + 2*9 + 1*8 + 0*7 + 3*6 + 2*5 + 1*4 + 1*3 + 0*2 + 1*1 = 122
Lock - 2*10 + 0*9 + 3*8 + 1*7 + 3*6 + 2*5 + 2*4 + 2*3 + 0*2 + 2*1 = 95
Satomi - 2*10 + 0*9 + 3*8 + 4*7 + 2*6 + 0*5 + 0*4 + 1*3 + 2*2 + 3*1 = 80
Pillar - 1*10 + 0*9 + 1*8 + 3*7 + 1*6 + 3*5 + 1*4 + 3*3 + 2*2 + 2*1 = 79
Sean - 0*10 + 0*9 + 4*8 + 0*7 + 3*6 + 1*5 + 2*4 + 3*3 + 2*2 + 2*1 = 78
EdgedPixel - 0*10 + 0*9 + 1*8 + 4*7 + 2*6 + 0*5 + 1*4 + 6*3 + 1*2 + 2*1 = 74
Huri - 1*10 + 0*9 + 1*8 + 1*7 + 1*6 + 3*5 + 5*4 + 1*3 + 1*2 + 3*1 = 74
Bottersnike - 0*10 + 0*9 + 2*8 + 4*7 + 0*6 + 1*5 + 2*4 + 2*3 + 2*2 + 4*1 = 71
Limelier - 1*10 + 2*9 + 0*8 + 0*7 + 1*6 + 3*5 + 2*4 + 0*3 + 2*2 + 6*1 = 67
RandomGamer - 0*10 + 0*9 + 2*8 + 0*7 + 1*6 + 2*5 + 1*4 + 2*3 + 2*2 + 7*1 = 53
Wenn Sie 12 haben, wie würden Sie wissen, ob 3 Personen stimmten "4" oder 4 Personen stimmten "3"? –
Das würdest du nicht tun (es ist kein sehr gelungenes Beispiel). Ich habe auch die Anzahl der Leute, die abgestimmt haben, damit du das verwenden kannst, um zu sehen, welches passt. (Frage bearbeitet, um zu klären) – Bottersnike
Was hast du bisher versucht? Versuchen Sie, die Art zu interpretieren, wie Sie das Problem interpretieren und definieren Sie es mit Schritten (Sie führen Division mit Rest, iterieren durch mögliche Raten) – Uriel