我正在尝试编写一个递归算法,它返回将给定数字写为不同数字的和的所有可能性。例如,如果给定的数字是8,我的程序应该返回(1,7)(1,2,5)(1,3,4)(2,6)(3,5)。
就我所做的工作而言,我只能得到(在这个例子中)(1,7)(1,(2,5)(3,4))(2,6)(3,5),和组合,因为给定的数字更高,所以组合更加重叠。我怎么才能得到正确的结果而不是我的呢?该函数为:
public String calculate(float number, float i)
{
String str = "";
float half = number / 2;
while ( i < half)
{
float diff = number - i;
str = str + "(" + i + "," + diff + ")";
if (calculate(diff, i + 1) != "")
str = str + "(" + i + "," + calculate(diff, i + 1) + ")";
i++;
}
return str;
}函数的调用是calculate(number,1)。提前感谢您的帮助!
发布于 2016-03-15 06:33:06
这是一个基于Java answer的示例程序。根据您的要求,我将其修改为仅显示具有不同值的和。您可以修改它以返回连接的字符串,而不仅仅是写出总和。
class Program
{
static void Main(string[] args)
{
DisplayDistinctSums(8f);
}
static void DisplayDistinctSums(float baseNum)
{
DisplayDistinctSums(baseNum, baseNum - 1, "(");
}
static void DisplayDistinctSums(float baseNum, float nextNum, string sumString)
{
if (baseNum < 1)
{
sumString += ")";
Console.WriteLine(sumString);
return;
}
for (var i = Math.Min(nextNum, baseNum); i >= 1; i--)
{
if (!sumString.Contains(i.ToString()))
{
DisplayDistinctSums(baseNum - i, i,
sumString.Length == 1 ? sumString + i : sumString + ", " + i);
}
}
}
}输入: 8
输出:
(7, 1)
(6, 2)
(5, 3)
(5, 2, 1)
(4, 3, 1)https://stackoverflow.com/questions/35998633
复制相似问题