110,529
社区成员
发帖
与我相关
我的任务
分享
using System;
namespace CSharpTest
{
class Program
{
static double[] Items;
static int[] SelectCounter;
public static void Main()
{
Items = new double[] { 167.83, 167.84, 218.43, 101.37, 110.77, 136.32, 136.43, 161.21 };
SelectCounter = new int[Items.Length];
Array.Sort(Items);
double T = 560.6;
int N = 5;
if (Search(N, T, 0))
{
for (int i = 0; i < Items.Length; i++)
if (SelectCounter[i] > 0)
Console.WriteLine("{0}选{1}个", Items[i], SelectCounter[i]);
}
else
Console.WriteLine("无解");
Console.ReadKey();
}
public static bool Search(int remainCount, double remain, int currentIndex)
{
if (currentIndex >= Items.Length)
return false;
//因为是Double 所以需要一个近似
if (Math.Abs(Items[currentIndex] * remainCount - remain) < 0.000000000001)
{
SelectCounter[currentIndex] = remainCount;
return true;
}
else if (Items[currentIndex] * remainCount > remain)
return false;
for (int i = 0; i < remainCount; i++)
{
SelectCounter[currentIndex] = i;
if (Search(remainCount - i, remain - Items[currentIndex] * i, currentIndex + 1))
return true;
}
return false;
}
}
}