C# 英文字母加上数字,按8位来排
如题用C# 编写代码 26个英文字母加上10个数字,按8位来排,不能重复,有多少种组合方式?然后把他们全部显示出来,谢谢各位 --------------------编程问答-------------------- 应该是36*35*34*33*32*31*30*29=1,220,096,908,800种组合。如果我的电脑显示器够厉害,每秒显示10000行的话,也要接近4年才能显示完,我怕你等不了啊。 --------------------编程问答--------------------
顶
这个真的不显示。你就想一想现在就算英语有多个单词吧,更不要说其他语言 --------------------编程问答-------------------- 排列的话就是C(36,8)呗,用C#很容易算出结果,都显示出来太多了吧? --------------------编程问答--------------------
笔误,排列是A(36,8)[以前是P(36,8)],组合是C(36,8).
A(n,m)=n(n-1)(n-2)……(n-m+1)= n!/(n-m)! 此外规定0!=1
C(n,m)=A(n,m)/m!=n!/((n-m)!*m!) --------------------编程问答-------------------- 那不用显示出来,用C#怎么编写出来? --------------------编程问答-------------------- 这就是简单的排列组合问题
组合方式总数1楼已经告诉你了...显示的话,真的算了吧...
--------------------编程问答-------------------- 把问题的规模缩小一下,可以求解并显示。你的问题规模太大了:
class Program
{
const string charStr = "012345678";
const int size = 5;
static int count = 0;
static void Main(string[] args)
{
Ass(new char[size], 0, charStr.ToList());
Console.WriteLine("Count={0}", count);
Console.ReadLine();
}
static void Ass(char[] temp, int pos, List<char> lst)
{
for (int i = 0; i < lst.Count; i++)
{
temp[pos] = lst[i];
var smlst = new List<char>(lst);
smlst.RemoveAt(i);
if (pos == size - 1)
{
Console.WriteLine(new string(temp));
count++;
}
else
{
Ass(temp, pos + 1, smlst);
}
}
}
}
补充:.NET技术 , C#