海纳百川,有容乃大
重在思想,而非技术
博客园
首页
新随笔
联系
订阅
管理
随笔分类
javascript总结(2)
(rss)
抄袭(1)
(rss)
经验总结(5)
(rss)
文章分类
net协议(5)
(rss)
ocr(1)
(rss)
sql server性能有关(5)
(rss)
联通彩E开发(3)
(rss)
随笔档案
2006年6月 (3)
2005年10月 (2)
2005年9月 (3)
文章档案
2005年9月 (3)
2005年8月 (11)
相册
photo
最新随笔
1. 单一登录 Web 应用程序的企业级安全系统
2. 静态页htm传参数
3. javascript实现md5加密
4. 动网dvbbs验证码图片的自动识别(c#)
5. BMP图形文件分析类(c#)
6. 汉字转化成拼音的源代码
7. XMLHTTP实现POST数据的源代码
8. 排列组合类的另类实现
最新评论
排列组合类的另类实现
Posted on 2005-09-08 15:28
齐国老兵
阅读(954)
评论(4)
编辑
收藏
因为一段程序需要用到排列组合,上网查找现成的c#源代码,结果都是采用递归调用的,我觉得这种方式有一些缺点,所以想能否用其他方法实现。通过观察一个排列组合的结果可以总结出规律来:(过段时间补充),现把已经写好的现成的代码贴出来
1
using
System;
2
3
namespace
JJBase.ARITHMETIC
4
{
5
/**/
///
<summary>
6
///
JJBase 的摘要说明。
7
///
函数的功能是返回一个排列组合
8
///
first date:2005-9-3
9
///
author:梁俊杰
10
///
</summary>
11
public
class
Combination
12
{
13
public
Combination()
{}
14
public
string
[,] Combin(
string
[] a,
int
r)
15
/**/
/*
传入一个字符串数组,sub是取数组中的字符串的个数
16
阶乘公式:
http://blog.blogchina.com/upload/2004-11-04/20041104114227831468.gif
17
C(n,r)=n!/(r!*(n-r)!)
18
本程序采用的算法是:从左到右取值r个不重复的值,保存r个位置到pos[],其中pos[i]的数值肯定比pos[i+1]小
19
如果pos[i]到达a数组最后位置,则pos[i-1]的数值加1;
20
*/
21
{
22
int
total
=
a.Length;
23
string
[] oneResult
=
new
string
[r];
24
int
combins
=
0
;
//
组合个数
25
combins
=
Factorial(total)
/
(Factorial(r)
*
Factorial(total
-
r));
26
string
[,] result
=
new
string
[combins,r];
27
int
[] pos
=
new
int
[r];
28
for
(
int
i
=
0
;i
<
r;i
++
)
29
{
30
pos[i]
=
i;
//
初始化位置值
31
}
32
pos[r
-
1
]
--
;
33
for
(
int
l
=
0
;l
<
combins;l
++
)
//
组合个数已经确定
34
{
35
//
判断位置是否合法
36
//
说明此时需要进位
37
pos[r
-
1
]
++
;
38
for
(
int
i
=
r
-
1
;i
>=
0
;i
--
)
39
{
40
int
k
=
r
-
1
-
i;
41
if
(pos[i]
>=
total
-
k)
42
{
43
int
x
=
pos[i
-
1
];
44
x
++
;
45
pos[i
-
1
]
=
x;
46
for
(
int
m
=
i;m
<
r;m
++
)
{x
++
;pos[m]
=
x;}
47
}
48
else
{
break
;}
49
}
50
//
取得正确的位置或者下一个位置
51
//
把一个结果存入数组result
52
for
(
int
j
=
0
;j
<
r;j
++
)
53
{
54
result[l,j]
=
a[pos[j]];
55
}
56
}
57
return
result;
58
59
}
60
public
int
Factorial(
int
n)
61
//
返回阶乘的个数
62
//
n!=?
63
{
int
result
=
1
;
64
for
(
int
i
=
1
;i
<=
n;i
++
)
{result
*=
i;}
65
return
result;
66
}
67
}
68
}
绿色通道:
好文要顶
关注我
收藏该文
与我联系
Feedback
#1楼
回复
引用
2006-02-07 22:25
by
锦瑟[未注册用户]
很好,经测试通过!
#2楼
回复
引用
2006-02-11 02:13
by
锦瑟[未注册用户]
呵呵,发现一个致命的问题!
在进行阶乘计算的时候,怎么可以还用int来存储呢……那都是上e的数字,赶快改改吧!
#3楼
[
楼主
]
回复
引用
查看
2006-02-14 20:35
by
齐国老兵
收到
#4楼
回复
引用
2007-02-25 00:28
by
wang [未注册用户]
ggg
注册用户登录后才能发表评论,请
登录
或
注册
,
返回博客园首页
。
首页
博问
闪存
新闻
园子
招聘
知识库
最新IT新闻
:
·
iPhone 5四大猜想:泪珠状 带LED苹果标识
·
当当网Q4整体亏损1.3亿元 上年同期净利润1480万元
·
把孩子培养成为合格Geek的七个方法
·
担心网购的衣服不合身? 创业公司Clothes Horse用“问答”就能解决你的难题
·
评价社交媒体活动ROI的三个精确指标
»
更多新闻...
最新知识库文章
:
·
编程的艺术:漂亮的代码和漂亮的软件
·
GIT分支管理是一门艺术
·
编程:是一门艺术
·
编程是一门艺术吗?
·
对Java初学者的忠告
»
更多知识库文章...
China-pub 2011秋季教材巡展
China-Pub 计算机绝版图书按需印刷服务
公告
昵称:
齐国老兵
园龄:
6年6个月
粉丝:
0
关注:
0
常用链接
我的随笔
我的评论
我的参与
最新评论
我的标签
链接收藏
http://game.cfca.com.cn
http://www.chinacs.net/
http://www.connectionstrings.com/
http://www.connectionstrings.com/
家
酷网博客
网赚助手
协议分析网
http://www.cnpaf.net
有奖活动
源代码
源代码
正则表达式网站(Eng)
我参与的团队
DNN团队博客(0/0)
积分与排名
积分 - 22408
排名 - 4637
评论排行榜
阅读排行榜
posts - 8, comments - 37, trackbacks - 0, articles - 14
Copyright © 齐国老兵