c#语言.输出从数组a中取n个数的所有排列(可以重复)

如a={1,2,3}n=2输出11,12,13,21,22,23,31,32,33... 如a={1,2,3} n=2输出11,12,13,21,22,23,31,32,33 展开
 我来答
noahv
推荐于2016-09-11 · TA获得超过203个赞
知道答主
回答量:29
采纳率:100%
帮助的人:23.2万
展开全部
//题主没说明什么类型的数组作为输入,做了个泛型数组的例子
using System;
using System.Collections.Generic;
 
namespace ConsoleApplication1
{
    class Program
    {
        private static void printArray<T>(IEnumerable<T[]> ou)
        {
            foreach (var o in ou)
            {
                foreach (var item in o)
                {
                    Console.Out.Write(item);
                    Console.Out.Write(',');
                }
                Console.Out.WriteLine();
            }
        }
 
        static void Main(string[] args)
        {
            //测试3个元素的int数组,取样2个的排列
            //var testArray1 = ;
            printArray(GetPermutationN(new int[] { 1, 2, 3 }, 2));
 
            //测试4个元素的string数组,取样3个的排列            
            printArray(GetPermutationN(new string[] { "a", "b", "c", "d" }, 3));
 
        }
 
        public static IEnumerable<T[]> GetPermutationN<T>(T[] sourceArray, int permutationLength)
        {
            foreach (var index in getPermutationIndex(sourceArray.Length, permutationLength))
            {
                var rtnRow = new List<T>();
                foreach (var i in index)
                    rtnRow.Add(sourceArray[i]);
                if (rtnRow.Count == permutationLength)
                    yield return rtnRow.ToArray();
            }
        }
 
        /// <summary>
        /// 获取arrayLenght长度数组的permLength长度的排列
        /// 所使用的乘方式递归函数
        /// </summary>
        /// <param name="arrayLenght">
        /// 样本元素数组的长度
        /// </param>
        /// <param name="permLength">
        /// 从样本数组中取样的个数
        /// </param>
        /// <returns>
        /// 返回样本元素数组下标矩阵
        /// </returns>
        private static IEnumerable<int[]> getPermutationIndex(int arrayLenght, int permLength)
        {
            for (int i = permLength; i > 0; i--)
            {
                if (i > 1)
                {
                    var recursion = getPermutationIndex(arrayLenght, i - 1);
                    for (int j = 0; j < arrayLenght; j++)
                        foreach (var item in recursion)
                        {
                            var rtnRow = new List<int>();
                            rtnRow.Add(j);
                            rtnRow.AddRange(item);
                            yield return rtnRow.ToArray();
                        }
                }
                else
                    for (int j = 0; j < arrayLenght; j++)
                        yield return new int[] { j };
            }
        }
    }
}
内裤最大功能
2015-10-06 · TA获得超过3105个赞
知道大有可为答主
回答量:3202
采纳率:79%
帮助的人:471万
展开全部

因为可以重复,其实就是一个嵌套循环。

            ArrayList li = new ArrayList();
            li.AddRange(new int[]{1,2,3,4,5,6});
            for (int i = 0; i < li.Count; i++)
            {
                for (int j = 1; j < li.Count; j++)
                {
                   //在j循环里,拿li[i]这号元素和所有的其它元素拼接。 
                     Console.WriteLine(li[i]+"、"+li[j]);
                }
            }
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
szqaly
2015-10-06 · TA获得超过1745个赞
知道大有可为答主
回答量:2107
采纳率:77%
帮助的人:1504万
展开全部

       

        private void button1_Click(object sender, EventArgs e)
        {
            string[] a={"1","2","3"};
            int n = 2;
            object[] r = combine(a, n);
            foreach (var item in r) Console.WriteLine(item.ToString()); 
        }
        private object  []  combine( string[] sourceArray, int n)
        {
            if (n>1)
            {
            System.Collections .ArrayList r=new System.Collections.ArrayList ();
            for (int i = 0; i < sourceArray.Length; i++)
            {
                object[] ar = combine(sourceArray, n-1);
                for (int j = 0; j < ar.Length; j++)
                {
                    ar[j] = sourceArray[i] + ar[j];
                    r.Add (ar[j]);
                }               
            } 
             return r.ToArray ();
            }
        else
                {
                return sourceArray.ToArray  ();                
                }
        }
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式