昨天朋友给我出了个题,已知一组数字和预期结果。求从哪几位数相加等于预期结果?
一开始想到排列组合,从网上搜了个源码,不过过于复杂,现在按照自己的思路整理了一个简单的算法,下面是源码(C#)和工具的下载地址。
double[] arr = new double[] { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
double result = 16;
/// <summary>
/// 加法逆向计算
/// </summary>
/// <param name="LastResult">上一次计算结果</param>
/// <param name="LastExp">上一次表达式</param>
/// <param name="LastIndex">上一次计算的数字的索引</param>
public void Calc(double LastResult, string LastExp, int LastIndex)
{
for (int i = LastIndex + 1; i < arr.Length; i++)
{
var CurExp = LastExp + " + " + arr[i];
var CurResult = LastResult + arr[i];
if (CurResult == result)
{
if (LastResult == 0) { continue; }
OnSuc(CurExp);
}
else
{
Calc(CurResult, CurExp, i);
}
}
}
工具下载 此工具需要.NET Framework4.0环境