C#
 Computer >> コンピューター >  >> プログラミング >> C#

C#を使用してk合計に対応する一意の組み合わせk合計を見つける方法は?


有効なシーケンスを格納する出力リストを作成し、再帰ツリーのパスで見つかった現在のシーケンスを格納する現在のリストを作成します。ターゲットが達成されるまで再帰に入るバックトラック関数。それ以外の場合は、ターゲットが0未満になると、前のフェーズにバックトラックする必要があります。任意の時点で、ターゲットが0になった場合は、候補配列を結果に次のように追加します。候補配列の値は、指定されたターゲットまで合計する必要があります。

そうでない場合は、候補配列に要素を1つずつ追加し、再帰的に前進します。

たとえば、数値が5でkが2であるため、5を形成するサイズ2の数値の組み合わせを形成する必要があります。出力は「1,4」、「2,3」になります。

using System;
using System.Collections.Generic;
using System.Text;
using System.Linq;
namespace ConsoleApplication{
   public class BackTracking{
      public void UniqueCombinationSumOfExactKNumbers(int n, int k){
         int[] array = new int[n];
         for (int i = 1; i < n; i++){
            array[i] = i;
         }
         List<int> currentList = new List<int>();
         List<List<int>> output = new List<List<int>>();
         UniqueCombinationSumOfExactKNumbers(array, n, k, 0, 0, currentList, output);
         foreach (var item in output){
            StringBuilder s = new StringBuilder();
            foreach (var item1 in item){
               s.Append(item1.ToString());
            }
            Console.WriteLine(s);
            s = null;
         }
      }
      private void UniqueCombinationSumOfExactKNumbers(int[] array, int target, int countOfNumbers, int sum, int index, List<int> currentList, List<List<int>> output){
         if (sum == target){
            if (currentList.Count == countOfNumbers){
               List<int> newList = new List<int>();
               newList.AddRange(currentList);
               output.Add(newList);
               return;
            }
         }
         else if (sum > target){
            return;
         }
         else if (currentList.Count == countOfNumbers && sum != target){
            return;
         }
         else{
            for (int i = index; i < array.Length; i++){
               currentList.Add(array[i]);
               UniqueCombinationSumOfExactKNumbers(array, target, countOfNumbers, sum + array[i], i + 1, currentList, output);
               currentList.Remove(array[i]);
            }
         }
      }
   }
   class Program{
      static void Main(string[] args){
         BackTracking b = new BackTracking();
         b.UniqueCombinationSumOfExactKNumbers(5, 2);
      }
   }
}

出力

14
23

  1. Numpyを使用して特定の行列のすべての要素の合計を見つける方法は?

    このプログラムでは、numpyライブラリのsum()関数を使用して、numpy行列のすべての項を追加します。最初にランダムなnumpy行列を作成し、次にすべての要素の合計を取得します。 アルゴリズム ステップ1:numpyをインポートします。ステップ2:random()関数を使用してランダムなm×n行列を作成します。ステップ3:sum()関数を使用して行列内のすべての要素の合計を取得します。 サンプルコード import numpy as npmatrix =np.random.rand(3,3)print( numpyマトリックスは:\ n、matrix)print( \ nマトリックスの

  2. Pythonを使用して自然数の合計を見つける方法は?

    whileループを使用すると、変数iの値を1ずつ連続してインクリメントし、累積的に追加できます。 s,i=0,0 n=10 while i<n:    i=i+1    s=s+i print ("sum of first 10 natural numbers",s) forループは、自然数の範囲をループして累積的に加算するためにも使用されます。 s=0 for i in range(11):    s=s+i print ("sum of first 10 natural numbers&