首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

输入一字符串,求X种组合的算法解决思路

2012-03-26 
输入一字符串,求X种组合的算法输入一个string[]和要求的多少种组合X,然后枚举出组合假设:string[] listne

输入一字符串,求X种组合的算法
输入一个string[]和要求的多少种组合X,
然后枚举出组合
假设:
string[] list=new string[]{"a","b","c","d","e"}
求X=3的组合
就枚举出
abc
abd
abe
acd
...
...
这种组合算法怎么算.
list和X都是传进去的,不是固定为3的.

[解决办法]
把组合计算公式实现就好了,高中的东西。
[解决办法]
请善用搜索引擎,比如Google

你的要求,这个链接里的算法应该会比较适合:
http://topic.csdn.net/u/20110610/13/d1924231-0a45-4826-ac2a-7bbcfcb9fc93.html?18794
[解决办法]
http://topic.csdn.net/u/20110620/23/19e40ab1-91a9-452b-b392-24f7706fca93.html
[解决办法]

探讨

把组合计算公式实现就好了,高中的东西。

[解决办法]
个你写个demo。没有验证结果。如果有错误,你可以在这上面修改:
C# code
using System;using System.Collections.Generic;using System.Linq;namespace ConsoleApplication2{    class Program    {        public static void Main()        {            string[] list = new string[] { "a", "b", "c", "d", "e", "MM" };            var X = 3;            var cnt = 0;            foreach (var s in 你的组合(list, X))                Console.WriteLine("第{0}个结果:\t{1}", ++cnt, string.Join(string.Empty, s));            Console.ReadKey();        }        private static IEnumerable<string[]> 你的组合(string[] list, int X)        {            if (X == 1)            {                foreach (var s in list)                    yield return new string[] { s };            }            else if (X > 1)            {                for (var i = 0; i < list.Length; i++)                {                    var newList = list.Where((s, p) => p != i).ToArray();                    foreach (var sub in 你的组合(newList, X - 1))                        for (var j = 0; j < sub.Length; j++)                        {                            var ret = sub.ToList();                            ret.Insert(j, list[i]);                            yield return ret.ToArray();                        }                }            }        }    }}
[解决办法]
要注意,输出当然有bad这种结果啦,不是一定按照原来排列顺序的。

热点排行