| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1042 人关注过本帖
标题:C#中的组合问题
取消只看楼主 加入收藏
qdh
Rank: 1
等 级:新手上路
帖 子:31
专家分:0
注 册:2006-10-13
收藏
 问题点数:0 回复次数:8 
C#中的组合问题

有N个数,分别从其中取1至N个数进行组合(不考虑顺序),如何实现?
例如数组:1,2,3,4,5,分别从其中取1至5个数的组合是
取1个数组合:1,2,3,4,5;
取2个数组合:12,13,14,15,23,24,25,34,35,45;
取3个数组合:123,124,125,134,135,145,234,235,245,345;
取4个数组合:1234,1235,1345,2345;
取5个数组合:12345

搜索更多相关主题的帖子: 顺序 
2006-11-09 11:23
qdh
Rank: 1
等 级:新手上路
帖 子:31
专家分:0
注 册:2006-10-13
收藏
得分:0 
我得先看看关于递归的知识

我得先看看关于递归的知识

2006-11-09 11:40
qdh
Rank: 1
等 级:新手上路
帖 子:31
专家分:0
注 册:2006-10-13
收藏
得分:0 
谢谢两位赐教。
2006-11-09 15:15
qdh
Rank: 1
等 级:新手上路
帖 子:31
专家分:0
注 册:2006-10-13
收藏
得分:0 
4楼chenjin145老兄:
你的代码大于9就不行了?

[此贴子已经被作者于2006-11-10 20:55:51编辑过]

2006-11-10 20:27
qdh
Rank: 1
等 级:新手上路
帖 子:31
专家分:0
注 册:2006-10-13
收藏
得分:0 
al中有9个元素以上运行就出错。

[此贴子已经被作者于2006-11-10 20:53:54编辑过]


2006-11-10 20:53
qdh
Rank: 1
等 级:新手上路
帖 子:31
专家分:0
注 册:2006-10-13
收藏
得分:0 
好的
2006-11-10 21:00
qdh
Rank: 1
等 级:新手上路
帖 子:31
专家分:0
注 册:2006-10-13
收藏
得分:0 
这样也行,但不全,能帮我修改吗
static void Main(string[] args)
{
int j = Convert.ToInt32(Console.ReadLine());
ArrayList al = new ArrayList();
//ArrayList al2 = new ArrayList();
for (int i = 0; i < j; i++)
{
al.Add(Convert.ToString(i + 1));
}
ArrayList temp = (ArrayList)al.Clone();
string str = "";
string str2 = "";
for (int i = 0; i < al.Count; i++)
{
if (i > 0)
{
str = "";
for (int x = 0; x < i; x++)
{
str += al[x];
}
}

al.RemoveRange(0,i);
str2 = "";
foreach (String m in al)
{
str2 = str + m;
Console.Write(str2 + ",");
}
Console.WriteLine(";;;");
al = (ArrayList)temp.Clone();
//i = 0;
}
Console.ReadKey();
}

[此贴子已经被作者于2006-11-11 10:08:34编辑过]

2006-11-11 10:02
qdh
Rank: 1
等 级:新手上路
帖 子:31
专家分:0
注 册:2006-10-13
收藏
得分:0 

如何加套啊?我头都晕了

2006-11-11 11:58
qdh
Rank: 1
等 级:新手上路
帖 子:31
专家分:0
注 册:2006-10-13
收藏
得分:0 
考虑到N个元素有2的N次方减1种组合,把组合序号转成二进制,根据二进制中1的位置取出数组的元素组合即可。不知以下代码与16楼chenjin145的相比,哪个更快,谁有更好的思路请拿来共享。在此再次感谢各位帮助我的人!
static void Main()
{
int j = Convert.ToInt32(Console.ReadLine());
ArrayList al = new ArrayList();
for (int i = 0; i < j; i++)
{
al.Add(Convert.ToString(i + 1));
}
Double k = Math.Pow(2, j)-1;
Int64 m = Convert.ToInt64(k);
string str = "";
string str2 = "";
for (Int64 n = 1; n <= m; n++)
{
str = Convert.ToString(n, 2);
int strL = str.Length;
str2 = "";
for (int i = 0; i < strL; i++)
{
if (str.Substring(i, 1) == "1")
{
str2 = str2 + al[i + al.Count - strL];
}
}
Console.WriteLine(str2);
}
Console.ReadKey();
}
2006-11-12 16:36
快速回复:C#中的组合问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.037513 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved