任意数相加算法有关问题
任意数相加算法问题
19个数,任意个数相加,要求选出等于一个定数的组合。19个数最大2万,最小500,小数点不超过2位。求大神这算法怎么弄?
由于个数不定,用排列组合数量会非常大,没什么思路。
------解决思路----------------------
19个数,任意个数相加,要求选出等于一个定数的组合。19个数最大2万,最小500,小数点不超过2位。求大神这算法怎么弄?
由于个数不定,用排列组合数量会非常大,没什么思路。
------解决思路----------------------
private List<string> GetPlusRet(Single CosData, params string [] strDatas)
{
List<string> retdata = new List<string>();
List<Single> lstSig = new List<Single>();
//WriteCombinations<string>(strDatas, 3);
var c = new string[] { "14", "4.3", "12", "21.7" };
for (Int32 i = 1; i <= 4; i++)
{
WriteCombinations<string>(c, i, CosData);
}
return retdata;
}
static void WriteCombinations<T>(T[] array, int length,Single Data)
{
var combinations = new Combinations<T>(array, length);
foreach (var oneCom in combinations)
{
var sb = new StringBuilder();
Single ret = 0;
foreach (T item in oneCom)
{
ret += Convert.ToSingle(item.ToString());
sb.Append(item.ToString() + ",");
}
if (sb.Length > 0) sb.Remove(sb.Length - 1, 1);
if (Data == ret)
Console.WriteLine(ret.ToString());
Console.WriteLine(sb.ToString() );
}
Console.WriteLine(combinations.ToString());
Console.WriteLine();
}
public class Combinations<T>
{
#region メンバ
private IList<T> _items;
private int _length;
private List<IList<T>> _combinations;
private int[] _finalIndices;
#endregion
#region コンストラクタ
public Combinations(IList<T> items) : this(items, items.Count) { }
public Combinations(IList<T> items, int select)
{
if (select < 0)
throw new ArgumentException("選択要素数は、0以上でなくてはなりません。");
if (items.Count < select)