- 在线时间
- 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
- 自我介绍
- 往往
 |
3 ~% V+ d/ L! e- p/ s* e
/ E" o6 `; Y/ G( a
! O7 F c$ O: z4 O" q' B) S4 \/*' h0 G% {% S. Y" V/ I$ E, u0 L
使用递归方法求全排列1 i. s9 ^/ N/ N( \+ |
*/2 [% H7 z( M8 ^* {( P: d! i9 ]
3 f q; t7 u# \#include<stdio.h>' S+ o0 q1 H; Q+ Y
% e9 s0 Z! I c9 R5 Zint sum=0;
/ W9 ~1 I9 ]; mint main(){
8 w* _4 Y. q6 `; J' b& X, |: ` int n,i;* f; F; G! {5 O4 p
char *p;) ^* R! R/ }$ b% Z: o+ o
void perm(char *,int,int);
: D+ L9 V2 c! _" } W; s/ ^7 c3 @1 v' Z0 R$ m1 c% m3 _) N& V
scanf("%d",&n);( j% R) [: Q, z A. X% B+ p
p=new char[n];7 Y* ~- S) Z t- o( @$ c j
for(i=0;i<n;i++){
R, @! v7 `/ a2 s9 j' @* A0 e getchar();
1 C7 ~8 K/ |8 z6 F6 X- g: c scanf("%c",p+i);
' {7 Z: a! H8 u! g% q: \ s }, `% [3 [. `) Y' T
( P2 a3 s3 c/ c. ^ perm(p,0,n-1);$ m0 b/ M: f& J6 A2 L
printf("==>%d",sum);
; ?; j6 G7 P& m+ b8 q! |' H4 _! I: W* o' {
return 0;' e4 s& [, w( Y* T; T
} g1 b+ r7 Q7 D* @7 n
2 X4 o U1 W) h# d0 _. t
void perm(char *p,int s,int e){
4 ~/ @6 b- K- J, u& K int i;$ x7 M1 [) Q0 B+ @5 d
void swap(char*,char*);
9 p. t7 g7 A$ o* v& G3 b" o # k1 ~9 Q7 s% R- z" [9 j- X9 ^2 n
if(s==e){) s7 E5 ~ V+ Q J; Y7 B
printf("%s\n",p);
, m. B: y% _0 M# m0 k/ r0 Q( z2 C sum++;
4 e6 u. @4 p7 B. p& ]( |5 G9 F return ;
8 m- E, R2 j+ C5 T' j }+ V0 x- \9 z H8 k' }# E8 A
else{
2 D" F7 b9 H, U+ f4 N: S2 y4 u for(i=s;i<=e;i++){
1 }& v, c7 Y; {" C swap(p+s,p+i);
" z1 P$ _9 v$ u* M( O, K perm(p,s+1,e);
: y$ |6 F' P# H; P* b# y1 g swap(p+s,p+i);
/ k* U- O6 z: Y" j" A0 b$ ` }' A' o9 f' g4 O2 A
}
8 {$ Z. y: o( A5 p2 Y}
9 J; j% ?2 J2 \
% V" v3 a! ~/ Z6 N! Q( m" Ivoid swap(char *a,char *b){* J' C$ i- L' |' R& J3 z' b4 S
int tmp=*a;$ a; m( D; m6 {+ G
*a=*b;9 A# |: U: p: y8 } S* W8 I
*b=tmp;
' H) f/ K7 }! s( g$ P}4 V0 x: k( w/ x- t0 i* u Z6 l7 e
2 `2 U# Y' O! j' n9 X R6 p; R Z======================================================================$ H, k$ S G3 K5 Y
1.关于思路:当仅有一个元素时,全排列就是它自己本身一个;对于多个元素的序列,其全排列为去掉某个元素的全排列,再在这些全排列序列中加入该元素(如果某一个排列序列包含n个元素,那么加入的方案就有n+1个),这等价于每个元素做打头元素,后续的子序列的全排列,而for循环就是体现这一点。
% q; T7 l9 P6 e 2.关于输出:一开始我怎么也找不到输出的好办法!第一是尝试在下一层递归前输出字符,发现不行;后来在递归回来后再输出一次,还是不行……总之尝试了很多次都没有效果。最后从另一位大神中才想到有直接输出字符串的控制符!坑呐,说明自己对语法不够熟练,加紧练习!8 K3 r7 q ]5 o9 R
, l2 V# E$ Q! h/ W: A( {( Z/ C
8 Q# l7 M6 g& A) _+ ]( `7 h! B: ]
; J. E) n2 |' |% K% {) `. D# M0 g |
zan
|