Ich bin mir nicht sicher, warum Sie mit Doubles arbeiten, aber die Semantik der Ganzzahldivision wünschen.
double input = 100;
const int Buckets = 7;
double[] vals = new double[Buckets];
for (int i = 0; i < vals.Length; i++)
{
vals[i] = Math.Floor(input / Buckets);
}
double remainder = input % Buckets;
// give all of the remainder to the first value
vals[0] += remainder;
Beispiel für ints mit mehr Flexibilität,
int input = 100;
const int Buckets = 7;
int [] vals = new int[Buckets];
for (int i = 0; i < vals.Length; i++)
{
vals[i] = input / Buckets;
}
int remainder = input % Buckets;
// give all of the remainder to the first value
vals[0] += remainder;
// If instead you wanted to distribute the remainder evenly,
// priority to first
for (int r = 0; r < remainder;r++)
{
vals[r % Buckets] += 1;
}
Es sei darauf hingewiesen, dass das Doppelbeispiel kann numerisch nicht stabil sein dass bestimmte Eingabewerte und Schaufelgrößen zu undichten Bruchwerten führen können.
1 Stimmen
Warum sollte die erste 16 sein? Warum nicht 15, 15, 14, 14, 14, 14, 14? Das wäre IMO gleichmäßiger.
0 Stimmen
Will er damit sagen, dass alle "Teile" gleich sein müssen?
0 Stimmen
Ich hoffe nicht, sonst wird es wirklich schwierig, wenn der Zähler ungerade ist :)
0 Stimmen
@Brian: Kannst du den "Hausaufgaben"-Tag erklären? Der OP hat keinen solchen Hinweis gegeben... Ich nehme es zurück.
0 Stimmen
@CSharpeProgrammer: Können Sie uns eine genaue Beschreibung dessen geben, was mit "gleichmäßig aufteilen" gemeint ist?
0 Stimmen
Gleichmäßig aufteilen ist zweideutig. 2,2,2,2,2,2,88 ist auch gleichmäßig geteilt (wenn Sie "gerade" Zahlen meinen)
0 Stimmen
Wozu dient dieser Algorithmus, wenn nicht zum Lernen von Algorithmen? Es ist auch nicht so, dass niemand mit dem HW-Tag antworten wird; es ist nur dazu da, damit die Leute mehr über die Frage wissen.