日复一日

厚积薄发|跳跃的人生

  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
  28 随笔 :: 0 文章 :: 78 评论 :: 0 引用
输出一个字符串所有排列。注意有重复字符。

 1char[] p;
 2void perm(char s[], int i, int n){
 3 int j;
 4 char temp;
 5 for(j=0;j<n;++j){
 6  if(j!=0 && s[j]==s[j-1]);
 7  elseif(s[j]!='@'){
 8   p[i]=s[j];
 9   s[j]='@';
10   if(i==n-1){
11    p[n]='\0';
12    printf("%s", p);
13   }
else{
14    perm(s,i+1,n);
15   }

16   s[j]=p[i];
17  }

18 }

19}
1void main() {
2  char s[N];
3  sort(s);
4  perm(s,0,strlen(s));
5}

6
posted on 2006-06-18 21:17 GwQ 阅读(1702) 评论(15) 编辑 收藏

评论

#1楼 2006-06-18 21:35 overred      
俺诚心建议楼主把此类帖子归结为一篇
谢谢
 回复 引用 查看   

这个好像是排列,不是组合吧。
 回复 引用   

#3楼[楼主] 2006-06-19 00:06 GwQ      
@sin(EaTing)
没错,是排列。
 回复 引用 查看   

#4楼 2006-06-20 11:59 lyj[未注册用户]
wa.
sineating.
 回复 引用   

#5楼 2006-06-20 12:05 lyj[未注册用户]
你这个能处理重复情况吗?

比如ABB
 回复 引用   

#6楼[楼主] 2006-06-20 12:30 GwQ      
@lyj
有什么问题吗?
 回复 引用 查看   

#7楼[楼主] 2006-06-20 12:35 GwQ      
@lyj
你也崇拜他?
 回复 引用 查看   

#8楼 2006-06-20 16:07 lyj[未注册用户]
@GwQ
学长啊
 回复 引用   

#9楼 2006-06-20 16:07 lyj[未注册用户]
@GwQ
我觉得你这个
ABB可能会输出2次..
 回复 引用   

#10楼[楼主] 2006-06-20 20:32 GwQ      
@lyj
哈。师弟。
 回复 引用 查看   

#11楼[楼主] 2006-06-20 20:40 GwQ      
@lyj
哪里重复了?
 回复 引用 查看   

#12楼 2006-06-20 22:24 Ques[未注册用户]
楼主的 str 和 d 是在哪里定义的啊?
printf("%s", d);
perm(str,i+1,n);
 回复 引用   

#13楼[楼主] 2006-06-21 08:35 GwQ      
@Ques
已修改,谢谢。
 回复 引用 查看   

#14楼 2006-06-21 19:41 lyj[未注册用户]
你怎么控制不重复?
 回复 引用   

我是猪。
 回复 引用   

#16楼 2008-10-10 11:35 Afro[未注册用户]
全排列
 回复 引用