2

少し問題があります。156、340(またはの場合)などに番号を追加してからArrayList、156、340(の場合)のように番号を削除します。次の解決策は問題なく機能します。私が抱えている問題は、一部の古いデータでは、従業員が500 + 400 + 100+500ではなく1500のような合計を入力していたことです。Sell / TransferOutがあり、ArrayList内に一致するものがない場合に、そのArrayListから複数の項目を追加し、結合して集合体になる要素を見つけるように変更するにはどうすればよいですか。TransferInBuyTransferOutSell

   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;
    }
}
4

2 に答える 2

4

これは、あなたが思っているよりも難しいかもしれません。

于 2010-03-19T10:19:53.177 に答える
3

これは、サブセット和問題と呼ばれるナップサック問題のバリエーションです。複数の解決策については、ここで私の答えを確認してください。動的計画法を使用する場合に削除する必要のある実際の項目を取得するには、特定の合計を取得するために最後に追加した要素が何であるかを示す2番目の配列を保持し、それを使用して解決策を見つけることができます。動作させられない場合は、投稿してください。数値が多い場合は、とにかくランダム化アルゴリズムをお勧めします。実装が簡単で、メモリと時間効率が高くなります(通常)。

于 2010-03-19T10:31:41.140 に答える