2012-02-01 11 views
1

ユーザーは1から19までの範囲の数値を入力しています...できるだけ多くを見つける必要があります。各番号は1回のみ使用できます。C#で合計まで加算した数値のリストを検索する

したがって、リストは次のとおりです: 19,17,11,13,8,9,7,5,10,16,14,8,7,3。

、出力は次のようになります。
19、11、10
16、14、7、3
17、8、8、13を7

、9および5は、リストに残さ。

私はいくつかの提案を見つけましたが、1つのマッチを探すように見えましたが、自分で試しましたが、それでもまだ洗練されていません。私はすぐに残していると、コードの実際のブロックのタイプすることはできませんが、ここでこれを行うだろうかだ

private void btnCalc_Click(object sender, RoutedEventArgs e) 
    { 
     // Copy the list to a new list: 
     List<int> lookInto = new List<int>(); 
     foreach(int i in weaponList) 
     { 
      lookInto.Add(i); 
     } 

     int lookFor = 40; 
     while (lookFor > 0) 
     { 
      lookFor = Search(lookInto, lookFor); 
     } 
     if (lookFor != -1) 
     { 
      listSell.Items.Add(answer); 
     } 
    } 

    private int Search(List<int> hay, int needle) 
    { 
     int lowestValue = hay.Min(); 
     int highestValue = hay.Max(); 

     if (hay.BinarySearch(needle) > 0) 
     { 
      int index = hay.BinarySearch(needle); 

      if (answer == "") 
      { 
       answer += hay[index].ToString(); 
       needle -= hay[index]; 
       hay.Remove(needle); 
      } 
      else 
      { 
       answer += ", " + hay[index].ToString(); 
       needle -= hay[index]; 
       hay.Remove(needle); 
      } 
     } 

     if (needle - highestValue > lowestValue || needle - highestValue == 0) 
     { 
      if (answer == "") 
      { 
       answer += highestValue.ToString(); 
       needle -= highestValue; 
       hay.Remove(highestValue); 
      } 
      else 
      { 
       answer += ", " + highestValue.ToString(); 
       needle -= highestValue; 
       hay.Remove(highestValue); 
      } 
     } 
     else 
     { 
      for (int i = 0; i > hay.Count; i++) 
      { 
       if (needle - hay[i] == 0 || needle - hay[i] > lowestValue) 
       { 
        if (answer == "") 
        { 
         answer += hay[i].ToString(); 
         needle -= hay[i]; 
         hay.RemoveAt(i); 
        } 
        else 
        { 
         answer += ", " + hay[i].ToString(); 
         needle -= hay[i]; 
         hay.RemoveAt(i); 
        } 
       } 
      } 
      if (needle > 0) 
      { 
       needle = -1; 
      } 
     } 

     return needle; 
    } 
+1

質問は何ですか? – hatchet

+3

また、この宿題はありますか? –

+0

質問は基本的に、例のような値を見つけるために何をする必要がありますか?そして、いいえ、それは私が自分で作っているマイナーなプログラムのための宿題ではありません。 – Dalmar

答えて

0

:ステップ実行するために再帰関数を使用して、すべての数字のミラーリングされた静的な配列を作成し、その配列から40までの数値を加算しようとします.40を渡すと-1を返します。そうでない場合は、40に到達するために使用されるすべてのインデックスをインデックスとして返します。ミラーリングされた配列から次の反復でそれらを使用しようとせず、数をセットのリストに追加します。再帰関数が停止すると、メイン配列に残っているものは未使用の番号であり、セットのリストには見つかったすべてのセットが含まれます。

こちらがお役に立てば幸いです。

関連する問題