C# 四个字母生成4组3位不同组合,并且不能有重复

生成的每组的字符都不能有同时出现过,如a,b,c,d,只能生成abc,abd,acd,bcd,有没有算法,我是C#初学者,同样如果是5个字母生成3位不同组合呢?谢谢!!!... 生成的每组的字符都不能有同时出现过,如 a,b,c,d ,只能生成 abc,abd,acd,bcd,有没有算法,我是C#初学者,同样如果是5个字母生成3位不同组合呢?谢谢!!! 展开
 我来答
aha_no_one
2015-01-06 · TA获得超过499个赞
知道小有建树答主
回答量:167
采纳率:0%
帮助的人:186万
展开全部
        static void Main(string[] args)
        {
            string str = Console.ReadLine();    // 此处接受的是全字符 比如 abcde 的形式
                                                // 如果有间隔符或相同字符的话请自行处理
            List<string> list = GetAssembly(str);
            foreach (string s in list)
            {
                Console.WriteLine(s);
            }

            Console.ReadKey();
        }

        static List<string> GetAssembly(string str)
        {
            List<string> list = new List<string>();

            for (int i = 0; i < str.Length - 2; ++i)    // 从字符串第一位遍历到倒数第三位
            {
                for (int j = i + 1; j < str.Length - 1; ++j)    // 从第一个字符的后一位遍历到字符串的倒数第二位
                {
                    for (int k = j + 1; k < str.Length; ++k)    // 从第二个字符的后一位遍历到字符串的最后一位
                    {
                        list.Add("" + str[i] + str[j] + str[k]);
                    }
                }
            }
            
            return list;
        }

阳光的雷咩咩
推荐于2016-07-27 · TA获得超过1.4万个赞
知道大有可为答主
回答量:2.3万
采纳率:66%
帮助的人:7652万
展开全部
    class Program
    {
        static void Main(string[] args)
        {
            List<char> lst = new List<char> { 'a', 'b', 'c', 'd' };

            foreach (var comb in Combinations(lst, 0, 4, 3))
            {
                string r = new string(comb.Take(3).ToArray());
                Console.WriteLine(r);
            }
            Console.ReadLine();
        }


        public static IEnumerable<List<char>> Combinations(
    List<char> sq, int i0, int n, int c)
        {
            if (c == 0) yield return sq;
            else
            {
                for (int i = 0; i < n; i++)
                {
                    foreach (var perm in Combinations
                        (sq, i0 + 1, n - 1 - i, c - 1))
                        yield return perm;
                    RL(sq, i0, n);
                }
            }
        }

        private static void RL(List<char> sq, int i0, int n)
        {
            char tmp = sq[i0];
            sq.RemoveAt(i0);
            sq.Insert(i0 + n - 1, tmp);
        }
    }

 

            //5位取3个
            //List<char> lst = new List<char> { 'a', 'b', 'c', 'd', 'e' };
            //foreach (var comb in Combinations(lst, 0, 5, 3))
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
迷之冰路
2015-01-06 · 超过12用户采纳过TA的回答
知道答主
回答量:49
采纳率:0%
帮助的人:28.9万
展开全部
楼上的回答已经很到位了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式