组合算法
33选六的组合算法. 我用c#写,6个for 循环.但运行的时候慢得要死人.现在想求一高效的算法,希望大家多多的指教小弟,谢谢!!!!!!!!!!!!! --------------------编程问答-------------------- 关注 --------------------编程问答-------------------- LZ想买易做图,帮帮他吧!--------------------编程问答-------------------- 关注,我也想买易做图 --------------------编程问答-------------------- 买易做图挺好的,捐助福利事业 --------------------编程问答-------------------- 另一方法:递归+回溯(用于步确定选择时,)
注:因为是33选6,用6个FOR循环是不错的选择,可是运行速度慢,那是当然的.
因为有1291467969种组合.希望回答已经令你满意. --------------------编程问答-------------------- 这么多组合枚举出来。似乎也没什么意义吧。对于你的要求,我不知道怎么做更好。 --------------------编程问答-------------------- 可以告诉你 --------------------编程问答-------------------- 先把33个数字的顺序随机打乱,然后取前6个就就完事啊,时间空间是N
你那算法的时间空间是N的6次方,比33再打那么几个就没有计算机能计算出来了哦,呵呵 --------------------编程问答--------------------
using System;
using System.Text;
namespace q
{
class myclass
{
static void Main()
{
int length=6;
string s="1234567890ABCDEFGHIJKLMNOPQRSTUVW"; //参与组合的元素
string ss_length="6";
string[] strArry = new string[s.Length];
string[] resultstrArry = new string[length];
int[] parr = new int[length];
//Get KeyArry
for (int xx = 0; xx < s.Length; xx++)
{
strArry[xx] = s.Substring(xx, 1);
}
long All = 0;
for (int i = 6; i <= length; i++)
{
All += Convert.ToInt64(Math.Pow(s.Length, i));
}
Console.WriteLine(All.ToString());
Console.ReadKey();
for (int i = 6; i <= length; i++) // i=6 当前要穷举位数
{
int[] Arrpos = new int[i];
string[] result = new string[i];
bool create = true;
int ii, jj;
while (create)
{
StringBuilder sb = new StringBuilder();
for (ii = 0; ii < i; ii++)
{
result[ii] = strArry[Arrpos[ii]];
sb.Append(result[ii]); //<==这里是每列
}
Console.WriteLine(sb.ToString());
//<==这里输出一整行
for (jj = i - 1; jj >= 0; jj--)
{
Arrpos[jj]++;
if (Arrpos[jj] != strArry.Length) { break; }
else
{
Arrpos[jj] = 0;
if (jj == 0)
{
create = false;
}
}
}
}
}
Console.ReadLine();
//DONE!
}
}
}
大概就像这样了
什么?你要写文件?s变量的内容不会设? 自己推一下谷哥度娘 翻一下MSDN就会了
补充:.NET技术 , C#