比如我这里有4个数字:2、3、4、6
我需要用随便几个数字搭配相加得出结果为全排列若干组合,请问如何写这样的代码?
2+3=5
2+4=6
2+6=12
2+3+4=9
2+3+4+6=15
2+3+6=11
2+4+6=12
3+4=7
3+6=9
3+4+6=13
4+6=10
我题目写的不太对,应该是:得到这4个数字的全排列相加
也就是得到各种排列组合之和。
(注意效率,可能数据会达到几千个)
static int[] number;
static int[] result;
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main(string[] args)
{
number = new int[] {2,3,4,6};
result = new int[number.Length];
Backtrace(0);
System.Console.Read();
}
static void Backtrace(int i)
{
if (i >= number.Length)
{
//没有数字可选
return;
}
result[i] = 1; //选中当前数字
PrintResult(); //输出结果
Backtrace(i+1); //选择下一数字
result[i] = 0; //剔除当前数字
Backtrace(i+1); //选择下一数字
}
static void PrintResult()
{
int count = 0;
int total = 0;
string msg = "";
for (int i = 0; i < result.Length; i++)
{
count += result[i];
if (result[i] == 1)
{
if (count > 1)
{
msg += "+";
}
total += number[i];
msg += number[i];
}
}
if (count > 1)
{
System.Console.WriteLine(msg + "=" + total);
}
}
可能是我没说得清楚。我需要的是每一组的排列求和,而不是总的求和。不过还是要感谢你!
追答和FIBO数列一样,如果要追求遇到较大阶数的执行速度,递归这条路就死了(FIBO数列还有巧可取)
但你的题,如果要列出每一个组合,并且要求和
那么对1000个数字来说,每个数字都有两种选择(出现和不出现)
也就说2^1000种组合,这个数量级在10^301
什么地方的题? 这个题目如果没有描述错的话
和汉诺塔一样,阶数高了,运行到你死了也没有结果
说的很对,估计无解了。必须加上其他条件(比如找到的数据就不参加运算)来减少数据量
感谢大伙的回复!特别是yangquneng!计算是出来了,可惜加大数据(2000个数据)程序就死了。还有什么提高效率的方法么?谢谢!
c# 如何将几个数字进行搭配相加,得出全排列组合
\/\/没有数字可选 return;} result[i] = 1; \/\/选中当前数字 PrintResult(); \/\/输出结果 Backtrace(i+1); \/\/选择下一数字 result[i] = 0; \/\/剔除当前数字 Backtrace(i+1); \/\/选择下一数字 } static void PrintResult(){ int count = 0;int total = 0;string msg = "";for (int ...
C# 6个数字得出全部排列组合 写入listbox内
一个组合的数字可以重复的话就简单 一个数组循环6次 不可以重复的话就6个数组 每次挖掉用过的 也是6次循环
md5 算法程序+详细注释,高分求教!
有两种方法得到字典,一种是日常搜集的用做密码的字符串表,另一种是用排列组合方法生成的,先用md5程序计算出这些字典项的md5值,然后 再用目标的md5值在这个字典中检索。我们假设密码的最大长度为8位字节(8 bytes),同时密码只能是字母和数字,共26+26+10=62个字符,排列组合出的字典的项数则是p(62,1)+p(62,...
斐波那契数列与音乐!!!
我们知道在钢琴的键盘上,从一个 C 键到下一个 C 键就是音乐中的一个八度音程(如图1) . 其中共包括13 个键,有8 个白键和5 个黑键 ,而 5 个黑键分成 2 组 ,一组有 2 个黑键 ,一组有 3 个黑键.2、3、5、8、13 恰好就是著名的斐波那契数列中的前几个数. 如果说斐波那契数在钢琴键上的出现...
数字怎么生成二维码?
二维码生成器的制作需要一个二维码生成算法,或者一个二维码插件,然后用JAVA,C#,VB等编程语言编写一个调用软件就可以做成二维码生成器了。 这个二维码生成算法就是将组成二维码的0、1数字矩阵进行组合,输入二维码生成器的信息不同,所得到的0、1数字矩阵组合也不相同,因此生成的二维码样式就各种各样。