2 Stimmen

Zählproblem C#

Ich habe ein kleines Problem. Ich füge Zahlen zu ArrayList wie 156, 340 (wenn es sich um TransferIn o Buy ) usw. und dann entferne ich sie, indem ich es wie 156, 340 (wenn es TransferOut , Sell ). Die folgende Lösung funktioniert ohne Probleme. Das Problem, das ich habe, ist, dass die Mitarbeiter für einige alte Daten Summen wie 1500 statt 500+400+100+500 eingegeben haben. Wie würde ich es ändern, so dass, wenn es Sell/TransferOut und es gibt keine Übereinstimmung innerhalb ArrayList sollte es versuchen, mehrere Elemente aus dieser ArrayList hinzufügen und finden Elemente, die in Aggregat kombinieren.

   ArrayList alNew = new ArrayList();
   ArrayList alNewPoIle = new ArrayList();
   ArrayList alNewCo = new ArrayList();
   string tempAkcjeCzynnosc = (string) alInstrumentCzynnoscBezNumerow[i];
   string tempAkcjeInId = (string) alInstrumentNazwaBezNumerow[i];
   decimal varAkcjeCena = (decimal) alInstrumentCenaBezNumerow[i];
   decimal varAkcjeIlosc = (decimal) alInstrumentIloscBezNumerow[i];
   int index;
   switch (tempAkcjeCzynnosc) {                  

          case "Sell":
          case "TransferOut":
          index = alNew.IndexOf(varAkcjeIlosc);
          if (index != -1) {
              alNew.RemoveAt(index);
              alNewPoIle.RemoveAt(index);
              alNewCo.RemoveAt(index);
          } else {
              // Number without match encountred
          }
          break;

          case "Buy":
          case "TransferIn":
               alNew.Add(varAkcjeIlosc);
               alNewPoIle.Add(varAkcjeCena);
               alNewCo.Add(tempAkcjeInId);
               break;
    }
}

4voto

LukeH Punkte 251752

Dies könnte sich als schwieriger erweisen, als Sie vielleicht denken:

3voto

IVlad Punkte 42204

Dies ist eine Variante des Knapsack-Problems, die Teilmengensummenproblem . Prüfen Sie meine Antwort ici für mehrere Lösungen. Um die tatsächlichen Elemente zu erhalten, die Sie entfernen müssen, wenn Sie den Ansatz der dynamischen Programmierung verwenden, behalten Sie einfach ein zweites Array, das Ihnen sagt, welches das letzte Element war, das Sie hinzugefügt haben, um eine bestimmte Summe zu erhalten, dann können Sie das verwenden, um die Lösung zu finden. Melde dich, wenn du es nicht hinbekommst. Wenn Sie viele Zahlen haben, empfehle ich sowieso den randomisierten Algorithmus, da er einfacher zu implementieren und (normalerweise) speicher- und zeiteffizienter ist.

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