- 在线时间
- 6 小时
- 最后登录
- 2015-5-5
- 注册时间
- 2015-4-8
- 听众数
- 9
- 收听数
- 3
- 能力
- 0 分
- 体力
- 111 点
- 威望
- 0 点
- 阅读权限
- 20
- 积分
- 49
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 27
- 主题
- 14
- 精华
- 0
- 分享
- 0
- 好友
- 7
升级   46.32% TA的每日心情 | 擦汗 2015-5-5 09:17 |
|---|
签到天数: 13 天 [LV.3]偶尔看看II
- 自我介绍
- 往往
 |
9 R1 D9 p v0 s$ K# I' ]
$ o& X2 V& V! [
: y. J7 L! L3 [$ i: x% n/ V
/*! y. t$ q) U( K# B9 s7 q
使用递归方法求全排列' D% S# W' c& Q: m$ H6 P* c
*/
7 i& R& j0 i# k. w# s& X2 c5 J9 ~6 H' d$ ~4 Y$ E
#include<stdio.h>: }0 F% A3 E" H
' s4 e1 t# K. k! T- r" o
int sum=0;
5 V M* r5 b" U3 ]' b5 @! B" Lint main(){
! h$ f$ z( w6 `# O) s+ A0 ^ int n,i;
# ?2 e8 R2 a8 h# ?& {$ b char *p;" L! G( l4 Z% V% K
void perm(char *,int,int);4 b2 y" Q# c1 X* g. W. J' t: e/ D
! M% J$ }* r1 P& K1 M, M
scanf("%d",&n);
- y6 u7 M1 N+ e- d7 U+ r2 v p=new char[n]; b E$ C9 k6 }, k5 n' D
for(i=0;i<n;i++){, P6 x1 a4 B% t# X* o4 f3 Q
getchar();
: m, f9 A7 t0 i scanf("%c",p+i);
: D: V; F; x2 {& L% n2 P4 g }
) H( `9 u/ A. O T2 B6 y
/ W/ X. X1 i; j9 P) c perm(p,0,n-1);( J I- w1 O7 r N2 I/ E
printf("==>%d",sum);
# [7 ^* v+ _) t0 s. l2 g2 [# c& q! |% l* z$ r7 h9 @# s
return 0;# k3 C4 |1 T0 x$ Q3 C5 ^
} |, @+ q4 `' p# K# T, L4 C* z* J
3 |# v+ `2 y6 |% y
void perm(char *p,int s,int e){8 { }9 h" p- B; l f
int i;! c" x& q0 L" p
void swap(char*,char*);
7 j7 n) A; M+ I9 \, y g 7 s H8 F4 s a8 S, `- F
if(s==e){
2 Y- K) B( Q; | printf("%s\n",p);" O2 g8 V2 e. S4 f5 }3 k/ I
sum++;0 f+ J+ `+ ~. a& @
return ;
, h' Y; G% E8 a+ T }
" x# t' H* F* n3 [5 e7 ^ else{
3 L+ C4 N5 i: |; |& d for(i=s;i<=e;i++){& k% g6 [) V9 F, _5 y
swap(p+s,p+i);
( {% M ^' u& f3 b perm(p,s+1,e);$ {: |; y% M4 _3 p4 P6 k
swap(p+s,p+i);
2 @6 M; g; o) ]2 T }
% W7 y5 Z. O: \/ a2 R1 x }. ~8 X0 \6 u/ I' m5 ~( S5 F
}& T; K% L* l" F6 J) W7 _
2 u+ G' w' C% ]4 gvoid swap(char *a,char *b){
+ j2 S+ [; L* x1 n1 W* v int tmp=*a;6 [7 L5 ~2 S5 L4 `9 \
*a=*b;
P" B4 `3 P. u. |+ S! G2 d+ X *b=tmp;
4 H) j' H/ D% A1 w& j}
$ Y$ i ^" @4 Q, U4 D
$ u. R) D3 u# E# i5 U======================================================================1 f/ P9 y2 c3 V9 u* m
1.关于思路:当仅有一个元素时,全排列就是它自己本身一个;对于多个元素的序列,其全排列为去掉某个元素的全排列,再在这些全排列序列中加入该元素(如果某一个排列序列包含n个元素,那么加入的方案就有n+1个),这等价于每个元素做打头元素,后续的子序列的全排列,而for循环就是体现这一点。
2 f! X; D2 |: I9 b! c; g 2.关于输出:一开始我怎么也找不到输出的好办法!第一是尝试在下一层递归前输出字符,发现不行;后来在递归回来后再输出一次,还是不行……总之尝试了很多次都没有效果。最后从另一位大神中才想到有直接输出字符串的控制符!坑呐,说明自己对语法不够熟练,加紧练习!; C6 Y* @/ c* A+ I8 R; R: G( S
8 {6 L s! {0 A+ G# O# v+ S1 G" f" x
% s5 a" y2 @9 V' h+ d! }* [( K' X
|
zan
|