Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C#

จะค้นหาผลรวมของผลรวมที่ไม่ซ้ำกันจากหมายเลข C # ที่กำหนดได้อย่างไร


สร้างรายการผลลัพธ์เพื่อจัดเก็บลำดับที่ถูกต้อง สร้างรายการปัจจุบันที่จะจัดเก็บลำดับปัจจุบันที่พบในเส้นทางของแผนผังการเรียกซ้ำ ฟังก์ชันย้อนรอยที่จะเข้าสู่การเรียกซ้ำจนกว่าเป้าหมายจะสำเร็จ มิฉะนั้น ควรย้อนย้อนไปยังเฟสก่อนหน้าเนื่องจากเป้าหมายมีค่าน้อยกว่า 0 ณ เวลาใด ๆ หากเป้าหมายกลายเป็น 0 ให้เพิ่มอาร์เรย์ตัวเลือกเข้ากับผลลัพธ์เป็น ค่าในอาร์เรย์ตัวเลือกจะต้องเป็นผลรวมของเป้าหมายที่กำหนด

หากไม่เป็นเช่นนั้น ให้เพิ่มองค์ประกอบในอาร์เรย์ตัวเลือกทีละรายการแล้วเลื่อนไปข้างหน้าซ้ำๆ

สมมติว่าตัวเลขคือ 5 ดังนั้นเราจึงต้องหาตัวเลขที่อยู่ในรูปแบบ 5 ผลลัพธ์จะเป็น “1,4”,”2,3”,5 จากผลลัพธ์ 014,.023 และ 05 สามารถทิ้งได้

ตัวอย่าง

using System;
using System.Collections.Generic;
using System.Text;
using System.Linq;
namespace ConsoleApplication{
   public class BackTracking{
      public void UniqueCombinationOfNumbersCorrespondsToSum(int n){
         int[] array = new int[n + 1];
         for (int i = 1; i <= n; i++){
            array[i] = i;}
            List<int> currentList = new List<int>();
            List<List<int>> output = new List<List<int>>();
            UniqueCombinationSum(array, n, 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 UniqueCombinationSum(int[] array, int target, int sum, int index, List<int> currentList, List<List<int>> output){
            if (sum == target){
               List<int> newList = new List<int>();
               newList.AddRange(currentList);
               output.Add(newList);
               return;
            }
            else if (sum > target){
               return;
            }
            else{
               for (int i = index; i < array.Length; i++){
                  currentList.Add(array[i]);
                  UniqueCombinationSum(array, target, sum + array[i], i + 1, currentList, output);
                  currentList.Remove(array[i]);
               }
            }
         }
      }
      class Program{
         static void Main(string[] args){
            BackTracking b = new BackTracking();
            b.UniqueCombinationOfNumbersCorrespondsToSum(5);
         }
      }  
   }
}

ผลลัพธ์

14
23
05