社区
C#
帖子详情
算法问题
zqsntws
2006-02-20 01:59:49
我想做一个函数,参数为字符串和维数,从该字符串中取出给定维数的组合,例如:该字符串为“a,b,c,d”,维数为2,则返回的结果为 :"ab,ac,ad,bc,bd",如维数为3,则结果为“abc,bcd”
...全文
253
21
打赏
收藏
算法问题
我想做一个函数,参数为字符串和维数,从该字符串中取出给定维数的组合,例如:该字符串为“a,b,c,d”,维数为2,则返回的结果为 :"ab,ac,ad,bc,bd",如维数为3,则结果为“abc,bcd”
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
21 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
達魔
2006-02-22
打赏
举报
回复
用递归可简单的实现如下:
void f(string src, int pos, int n)
{
if(n = 0)
{
return;
}
for(int i = pos; i < str.Length - n; i++)
{
if(n = 1)
{
将src + str[i]写进数组;
}
else
{
f(src + str[i], i + 1, n -1);
}
}
}
调用方式:f("", 0, n),n换成相应的维数即可;
str是原来的字符串,你只要把这个函数封装在类中,简单调整一下应该就可以了;
zqsntws
2006-02-21
打赏
举报
回复
谁能给我一段程序来实现这个功能?
zqsntws
2006-02-21
打赏
举报
回复
抱歉,我写漏了,应该是ab,ac,ad,bc,bd,cd
達魔
2006-02-21
打赏
举报
回复
问题描述的不够清楚,或者是我没看明白吧:
例如:该字符串为“a,b,c,d”,维数为2,则返回的结果为 :"ab,ac,ad,bc,bd",那么"cd"是不是也在返回结果之列?
如维数为3,则结果为“abc,bcd”那么“abd,acd”也是返回结果之列?
jackymi
2006-02-21
打赏
举报
回复
声明 程序我没有测试过 可以用下边的阶乘公式来做
C(n,r)=n!/(r!*(n-r)!)
zqsntws
2006-02-21
打赏
举报
回复
jackymi(完美刺客) :你这段程序有个严重的bug: order[0]=-1;根本就进不了循环,是不是粘代码时粘错了?哪位大侠再给点建议
李世垚
2006-02-21
打赏
举报
回复
public ArrayList GetArray(string sTxt,int iWs)
{
ArrayList myAr=new ArrayList();
int iMax=0;
string sTmp="",sTmp2="";
string[] a=sTxt.Split(new Char [] {','});//取得最原始的元素
for (int i=0;i<a.Length;i++)//建立最初的组合
{
myAr.Add(a[i]);
}
for (int i=2;i<=iWs;i++) //依次在各组合上加元素,直道长度达到指定长度为止
{
iMax=myAr.Count;
for (int j=0;j<iMax;j++){
sTmp=myAr[j].ToString();
sTmp2=sTmp.Substring(sTmp.Length-1,1);
for (int k=0;k<a.Length;k++){//这个循环可以优化
if (String.Compare(a[k],sTmp2)>0){
myAr.Add(sTmp+a[k]);
}
}
myAr.RemoveAt(j);
j--;
iMax--;
}
}
return myAr;
}
说明 最里面的那个循环可以优化,可以使用快速查找,或者保存检索位置什么的方法优化
zqsntws
2006-02-21
打赏
举报
回复
点点:先谢谢了
diandian82
2006-02-21
打赏
举报
回复
一会有空写一个
zqhpcc
2006-02-21
打赏
举报
回复
看《程序员面试攻略》一书,其中就有这类问题的详解和代码。
zqsntws
2006-02-21
打赏
举报
回复
各位大侠帮帮忙
jackymi
2006-02-20
打赏
举报
回复
给你一个简单的描述
int combine(int a[],int sub){
//a[1..?]表示候选集,sub表示一个排列(组合)的元素个数
{
int total=sizeof(a);
int order[sub+1];
int count=0;//符合条件的排列(组合)的个数
order[0]=-1;
for(int i=1;i<=sub;i++)
order[i]=i;
int k=sub;
bool flag=true;
while(order[0]!=-1){
if(flag){
for(i=1;i<=sub;i++)//输出符合要求的组合
printf("%d ",a[order[i]]);
printf("\n");
count++;
flag=false;
}
order[k]++;
if(order[k]==total+1){
order[k--]=0;
continue;
}
...
//在此加入order[k]的限制条件
//如果条件满足,则往下执行
//否则continue;
if(k<sub){
order[++k]=order[k-1];
continue;
}
if(k==sub)
flag=true;
}
return count;
}
zqsntws
2006-02-20
打赏
举报
回复
各位大侠不要总说术语,我不是很懂,照顾一下我,尽量说点通俗的:)
jackymi
2006-02-20
打赏
举报
回复
利用回朔组合
zqsntws
2006-02-20
打赏
举报
回复
lovvver(春晖) ,“全排列实现”是什么意思?能否多说几句?
lovvver
2006-02-20
打赏
举报
回复
这个方法很简单,关键在于你的“全排列实现”的问题。
自己试一下啦~
zqsntws
2006-02-20
打赏
举报
回复
给个链接也中:)
zqsntws
2006-02-20
打赏
举报
回复
各位大侠能给个具体例子吗?
JasonHeung
2006-02-20
打赏
举报
回复
直接采用数学上的组合算法。字符串只是根据组合输出结果而已。组合算法网上也很多。
kehua_gao
2006-02-20
打赏
举报
回复
好像应该用递归
加载更多回复(1)
算法
技术手册 - 中文版
《
算法
技术手册》内容简介:开发健壮的软件需要高效的
算法
,然后程序员们往往直至
问题
发生之时,才会去求助于
算法
。《
算法
技术手册》讲解了许多现有的
算法
,可用于解决各种
问题
。通过阅读它,可以使您学会如何选择和...
解决
算法
问题
的五种通用方法
毫无疑问,解决
算法
问题
一定不止5种方法,但是下面的五种方法可能更加有用。但是还是要记住,
算法
靠的是不停的练习,练习越多,很多
问题
就迎刃而解! 同样也必须记住,这五种方法不是单独的组成,它们可以混合在一起...
程序员必备
算法
课!(揭秘淘宝购物车
算法
)
如何在有限的预算下,选择到让你最满意的商品, 本次公开课主要从以下几方面进行讲解: 首先讲解如何将购物车选择商品
问题
转进行量化指标度量,转化为计算机可以求解的
算法
问题
; 其次结合实例讲解实际
问题
如何利用...
五分钟带你了解哈希
算法
究竟是什么!
今天呢,我们要讲一些比较深的内容,比如比特币的哈希
算法
问题
。熟悉区块链的朋友首先想到的肯定就是比特币挖矿,比特币挖矿就是不断修改区块头部的随机数,然后计算区块的哈希值,知道这个哈希值满足特定标准的过程...
经典
算法
问题
——稳定匹配(Stable Matching)
经典
算法
问题
——稳定匹配(Stable Matching)
问题
起源 在1962年,经济学家 David Gale 和 Lloyd Shapley 提出:能否设计一个高校录取过程,能够自我执行(self-enforcing)形成一个最佳的匹配效果。
算法
的 C++ ...
C#
110,538
社区成员
642,577
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章