当前位置:编程学习 > C#/ASP.NET >>

C# 英文字母加上数字,按8位来排

如题用C# 编写代码 26个英文字母加上10个数字,按8位来排,不能重复,有多少种组合方式?然后把他们全部显示出来,谢谢各位 --------------------编程问答-------------------- 应该是36*35*34*33*32*31*30*29=1,220,096,908,800种组合。
如果我的电脑显示器够厉害,每秒显示10000行的话,也要接近4年才能显示完,我怕你等不了啊。 --------------------编程问答--------------------
引用 1 楼  的回复:
应该是36*35*34*33*32*31*30*29=1,220,096,908,800种组合。
如果我的电脑显示器够厉害,每秒显示10000行的话,也要接近4年才能显示完,我怕你等不了啊。


这个真的不显示。你就想一想现在就算英语有多个单词吧,更不要说其他语言 --------------------编程问答-------------------- 排列的话就是C(36,8)呗,用C#很容易算出结果,都显示出来太多了吧? --------------------编程问答--------------------
引用 3 楼  的回复:
排列的话就是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#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,