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