写出十个数所有排列组合

mazavaca 2013-05-11 06:33:25
有十个数 0 1 2 3 4 5 6 7 8 9,从这十个数中任选5个数进行排列组合,不能出现重复的排列,用代码怎么写呢?
...全文
646 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
任选5个那不过是
    var rnd = new Random();
    var nums = Enumerable.Range(0, 10).OrderBy(x => rnd.Next()).Take(5).ToList();
  • 打赏
  • 举报
回复
你可以试试,例如5个数或者1000个数的“全排列”。 然后注意一下,其实程序很简单。这足以体现c#的优雅。可惜许多人只学了c#基本语法,不会自己写啊。
  • 打赏
  • 举报
回复
using System;
using System.Collections.Generic;
using System.Linq;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            var nums= Enumerable.Range(0,10).ToList();
            var cn = 0;
            foreach (var p in 排列(nums))
            {
                Console.WriteLine("方案 {0}:", ++cn);
                p.ForEach(x => Console.Write("{0} ", x));
                Console.WriteLine();
            }
            Console.WriteLine("__________________________End!");

            Console.ReadKey();
        }

        public static IEnumerable<List<int>> 排列(List<int> nums)
        {
            return 排列(nums, nums.Count);
        }

        public static IEnumerable<List<int>> 排列(List<int> nums, int count)
        {
            if (count > 1)
            {
                foreach (var a in 排列(nums, count - 1))
                {
                    var b = a.ToList();
                    for (var i = b.Count; i >= 0; i--)
                    {
                        b.Insert(i, nums[count - 1]);
                        yield return b;
                        b.RemoveAt(i);
                    }
                }
            }
            else
                yield return new List<int> { nums[0] };
        }

    }

}

110,545

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧