C# C如何将列表调整为最接近的目标金额

C# C如何将列表调整为最接近的目标金额,c#,C#,我有问题。我希望任何人都能提出建议 问题:我有一个金额列表,我想通过删除一些列表金额来调整最接近目标金额的列表 名单: 清单项目总数:62 目标:24假设你知道自己在做什么;请按照下面给出的步骤操作 下面用来实现你想要的目标的算法并不完美,必须改进,但至少可以让你开始 使用VisualStudio创建控制台应用程序 将下面给出的代码粘贴到Program.cs文件中 运行应用程序并按照说明操作 请输入一些代码。你试过什么?还不清楚你想要什么。。我只是cDo的新手,你是说把选择的数字加起来,得到最

我有问题。我希望任何人都能提出建议

问题:我有一个金额列表,我想通过删除一些列表金额来调整最接近目标金额的列表

名单:

清单项目总数:62


目标:24

假设你知道自己在做什么;请按照下面给出的步骤操作

下面用来实现你想要的目标的算法并不完美,必须改进,但至少可以让你开始

使用VisualStudio创建控制台应用程序

将下面给出的代码粘贴到Program.cs文件中

运行应用程序并按照说明操作


请输入一些代码。你试过什么?还不清楚你想要什么。。我只是cDo的新手,你是说把选择的数字加起来,得到最接近目标的值?首先尝试你的家庭作业,如果你遇到了问题,请回来。哇,这正是我的意思。谢谢Ajay先生,请注意,您必须改进逻辑,以确定需要删除的数字,如果您对代码感到满意,请接受这一回答。您的算法将对我有很大帮助,先生。这是我正在谈论的样本列表
2
4
7
41
6
2
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System;

namespace StackOverFlowHelp
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.Write("Enter the Amounts Separated By space : ");
            var listItems = Console.ReadLine();
            Console.Write("Enter the target : ");
            var target = Convert.ToInt32(Console.ReadLine());
            Console.WriteLine();

            List<Int32> numbers = listItems.Split(' ').Select(x => Convert.ToInt32(x)).ToList();
            if (numbers.Count <= 1)
            {
                Console.WriteLine("The list must contain at-least 2 numbers");
            }
            else
            {
                var currentSum = numbers.Sum();
                if (currentSum == target)
                {
                    Console.WriteLine("SUM of List " + string.Join(" ", numbers) + " already matches the target " + target + ". No number has been removed.");
                }
                else if (currentSum < target)
                {
                    Console.WriteLine("SUM of List " + string.Join(" ", numbers) + " is smaller than the target " + target + ". No number can been removed.");
                }
                else
                {
                    numbers.Sort();
                    var incrementalSum = 0;
                    var qualifiedIndex = 0;
                    for (int i = 0; i < numbers.Count; i++)
                    {
                        incrementalSum += numbers[i];
                        if (incrementalSum == target)
                        {
                            /*Remove the numbers after index value*/
                            qualifiedIndex = i + 1;
                        }
                        else if (incrementalSum > target)
                        {
                            /*Remove the numbers from index value*/
                            qualifiedIndex = i;
                        }
                        if (qualifiedIndex > 0)
                        {
                            /*We are ready with our results*/
                            Console.WriteLine("SUM of List " + string.Join(" ", numbers.Take(qualifiedIndex)) + " is closest to the target " + target + ". Following number can been removed: " + string.Join(" ", numbers.Skip(qualifiedIndex).Take(numbers.Count - qualifiedIndex)));
                            break;
                        }
                    }
                    if (qualifiedIndex == 0)
                    {
                        Console.WriteLine("Could not find any number to remove.");
                    }
                }
            }
            Console.WriteLine();
            Console.WriteLine("Press Any Key to Exit.....");
            Console.Read();
        }
    }
}