8 Stimmen

Gleichmäßige Teilung in c#

Wie kann ich in c# 100 gleichmäßig durch 7 teilen?

Das Ergebnis wäre also

  1. 16
  2. 14
  3. 14
  4. 14
  5. 14
  6. 14
  7. 14

Der nachstehende Code ist falsch, da alle 7 Werte auf 15 (insgesamt 105) gesetzt sind.

        double [] vals = new double[7];
        for (int i = 0; i < vals.Length; i++)
        {
            vals[i] = Math.Ceiling(100d / vals.Length);
        }

Gibt es eine einfache Möglichkeit, dies in c# zu tun?

Merci

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 :)

0voto

ShuggyCoUk Punkte 35230

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.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X