排列组合算法怎样写

chaojie_sea 2012-04-07 08:35:54
请问排列组合的算法怎样写?
比如有"A","B","C",排列组合成六种可能的结果:
"A","B","C" ; "A","C","B"
"B","A","C" ; "B","C","A"
"C","A","B" ; "C","B","A"
以后会有"A","B","C","D"
请问程序怎样写可以得出这些结果,谢谢!
...全文
1105 30 打赏 收藏 转发到动态 举报
写回复
用AI写文章
30 条回复
切换为时间正序
请发表友善的回复…
发表回复
w_xxxbbb 2014-12-17
  • 打赏
  • 举报
回复
牛,膜拜。
zyt5945 2013-09-16
  • 打赏
  • 举报
回复
今天刚刚飘过,想知道 如果是"A""B""C""D",这串字符的每个字符又包括若干不等的字母,想要把他们下面的那些字母排列组合,该怎么写呢 ,,,,
startstartsvip 2013-04-09
  • 打赏
  • 举报
回复
尼玛,每次登录都会默默地膜拜一番
startstartsvip 2012-04-17
  • 打赏
  • 举报
回复
[Quote=引用 26 楼 的回复:]

引用 5 楼 的回复:

简写一些#1楼的代码:C# code
using System;
using System.Collections.Generic;
using System.Linq;

namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
……
……
[/Quote]

验证完毕

看来一定要好好学习Linq

把很多东西都简化了

startstartsvip 2012-04-17
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]

简写一些#1楼的代码:C# code
using System;
using System.Collections.Generic;
using System.Linq;

namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
……
[/Quote]

立马收下,随便一翻,想啥来啥。

回头验证。
threenewbee 2012-04-14
  • 打赏
  • 举报
回复
程序员应该有基本的代码变化的能力。

比如将任何递归代码转换成非递归的版本的能力。

简化布尔表达式和复杂算术表达式的能力。

将任何同步的代码转换成异步,把异步代码转换成同步的能力。

使用委托/事件模型改写具有大量分支判断的代码。

将循环和函数调用内联合展开,或者将重复代码抽象成函数的能力。

将一种语言语法不支持的参考程序转换成所用程序支持的等价形式的能力。

模拟实现一种API中不具备的,在另一种系统中定义的系统函数的能力。

总之一个优秀的程序员应该具有超越编译器和重构软件的,从更高层次上思考程序,并且在细节上任意操纵代码的能力。
  • 打赏
  • 举报
回复
组合数 --> 排列数。
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 的回复:]

引用 15 楼 的回复:

引用 14 楼 的回复:
你好,我刚接触C#,是个菜鸟,您这个是C#代码?麻烦可以用C#代码写个类给我吗?谢谢。

几年前c#就支持这样的语法了。

我使用的vs2005, Miscrosoft.NET Framework 版本 2.0.50727 SP2
这些版本支持,我在vs2005 总是报语法错误.请问是不是要在大于2.0版本之上才支持哦。……
[/Quote]

2005年你多大?
  • 打赏
  • 举报
回复
大多数算法基于数学归纳法,或者编程上就是简单的递归。

假设 n-1 个字符的组合数是 P(n-1),那么P(n)自然就是 n*P(n-1),因为就是把最后增加第n个字符插入P(n-1)时的结果中的每一个可以插入字符的位置中。

于是递推:
P(n) = n * P(n-1)
P(n-1) = (n-1) * P(n-2)
.....
P(1) = 1
结果自然就是: P(n) = n!
SQL777 2012-04-14
  • 打赏
  • 举报
回复
在数据库交叉连接就行
SQL777 2012-04-14
  • 打赏
  • 举报
回复
学习。收藏LINQ
mngzilin 2012-04-12
  • 打赏
  • 举报
回复
排列组合在数学中,主要是利用这样的形式A(n,m)和C(n,m)以及高中或者大学学过的排列组合计算方法。

实现函数A(n,m)和C(n,m),然后直接计算就行了,比如

A(2,3)*C(3,4)/A(2,2)
threenewbee 2012-04-12
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 的回复:]
引用 14 楼 的回复:
你好,我刚接触C#,是个菜鸟,您这个是C#代码?麻烦可以用C#代码写个类给我吗?谢谢。

几年前c#就支持这样的语法了。
[/Quote]
没事,sp1234写的代码无论lz看懂没看懂,都不要紧。因为已经给我很多启发。
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 的回复:]
你好,我刚接触C#,是个菜鸟,您这个是C#代码?麻烦可以用C#代码写个类给我吗?谢谢。
[/Quote]
几年前c#就支持这样的语法了。
threenewbee 2012-04-12
  • 打赏
  • 举报
回复
C# 2.0的确不支持LINQ,但是我1L的代码还是可以用,因为yield已经支持。
只是调用部分略微需要修改下。
chaojie_sea 2012-04-12
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 的回复:]

引用 14 楼 的回复:
你好,我刚接触C#,是个菜鸟,您这个是C#代码?麻烦可以用C#代码写个类给我吗?谢谢。

几年前c#就支持这样的语法了。
[/Quote]
我使用的vs2005, Miscrosoft.NET Framework 版本 2.0.50727 SP2
这些版本支持,我在vs2005 总是报语法错误.请问是不是要在大于2.0版本之上才支持哦。谢!
chaojie_sea 2012-04-11
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]

简写一些#1楼的代码:C# code
using System;
using System.Collections.Generic;
using System.Linq;

namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
……
[/Quote]
你好,我刚接触C#,是个菜鸟,您这个是C#代码?麻烦可以用C#代码写个类给我吗?谢谢。
threenewbee 2012-04-08
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]
简写一些#1楼的代码:

C# code

using System;
using System.Collections.Generic;
using System.Linq;

namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
……
[/Quote]

sp1234的代码好!
EnForGrass 2012-04-08
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]

另外,写为Linq查询表达式也是一样的。因为Linq也会使用yield迭代器来延迟计算,所以不用担心Linq的效率问题。使用Linq看起来逻辑上更优雅:C# code
using System;
using System.Collections.Generic;
using System.Linq;

namespace ConsoleApplication1
{
class Prog……
[/Quote]
我来看看LINQ的实现方法
  • 打赏
  • 举报
回复
另外假设你需要同时打印排列序号,可以写
排列组合("ABCD", 0, 4).Select((x, i) => new { i = i, s = x })
.ToList()
.ForEach(x => { Console.WriteLine("第{0:D2}个排列是:{1}", x.i + 1, x.s); });
加载更多回复(7)

110,545

社区成员

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

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

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