- 在线时间
- 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
- 自我介绍
- 往往
 |
8 u5 Y5 T7 l9 J* E6 o
: ^' B- c' @; z7 Z* j& [3 w
& G8 c3 Q7 d8 R$ h; X; Q" i
/*" B) N; @. f/ X& ?( _2 o5 g7 I
使用递归方法求全排列0 J$ m* k& Y/ j$ {' v+ w! l
*/
) h L2 u5 U2 }8 d/ x
" G" F# X* j% I$ }# ]6 ~#include<stdio.h>. @# k/ {5 o, L$ ~9 t
% [! L* W* \3 C/ ^3 R* n9 S
int sum=0;6 }3 [2 a+ T& v2 L: W) @+ k, m
int main(){
1 ]5 z H* n- y' l int n,i;9 G2 M3 h3 W0 s1 `
char *p;2 E9 z! J2 Y* c
void perm(char *,int,int);0 h" m+ m) K. a' Y( C2 v1 e" ^
6 N* t! e: O9 l/ d; |
scanf("%d",&n);
, s3 d4 a& f2 g p=new char[n];
" E6 c8 ~7 A3 x for(i=0;i<n;i++){0 s5 G) u/ Z2 j
getchar();+ ^& g) x4 a: `' r. d( E
scanf("%c",p+i);* J6 ^! B6 G1 G3 b5 z3 l
}& x* ?& v8 d |( Y/ e
- N0 U! v6 E1 ]5 U- N7 C
perm(p,0,n-1);
- Q) O$ i8 ?2 A8 ? printf("==>%d",sum);
8 L( Q9 g' v0 u. g5 ], g1 X4 Z
8 T" V0 K; Z0 I7 P% q return 0;% E, ~) P; Q: b- r2 R# _
}) n; s7 s) G% n( s) ?
/ ~1 g. ?1 m0 S8 _( }/ Q ~9 u
void perm(char *p,int s,int e){
2 V1 X+ a& H9 @; P/ d int i;
L9 q$ Y' K; N6 x* v4 t void swap(char*,char*); C+ j* V9 [& D! f& l
: @" o' @6 m+ z8 e* I
if(s==e){+ _( e6 o0 N% ~1 L) o# m7 e
printf("%s\n",p);
. L) n* V6 I+ M: U( T- I5 Y1 C sum++;3 c5 _: n; E- v: H7 D
return ;
& _8 X7 c8 s8 [& E! H }0 y" d1 E- S" j( t; }
else{+ r* n& y* i6 G# L5 Z1 v
for(i=s;i<=e;i++){
. K) i% K" z0 j+ ]- c swap(p+s,p+i);
# b2 o& W9 y# p |4 i6 i- w6 H" W perm(p,s+1,e);% R; T; a8 ^! y1 U. a* R
swap(p+s,p+i);! u& F3 l7 p: C) v7 g, [% V
}1 a8 D4 i' K1 e- c
}
, G, T; K) n2 v) P}
7 v) m$ L8 v/ d" e
3 O& Q: Y) h6 D5 y2 d, |: M" ^void swap(char *a,char *b){
4 o5 a3 j( c B/ n* E, L int tmp=*a;
; {2 z5 D: i1 w' W- O1 t( U } *a=*b;4 I9 w5 r( [) v& B$ a# x+ g2 f7 c8 J
*b=tmp;
7 M, n! c. k; ^}( f( M, [1 N) q) r9 S
* `9 V) x1 E8 ]+ x2 S
======================================================================
4 j& _2 i. M) h 1.关于思路:当仅有一个元素时,全排列就是它自己本身一个;对于多个元素的序列,其全排列为去掉某个元素的全排列,再在这些全排列序列中加入该元素(如果某一个排列序列包含n个元素,那么加入的方案就有n+1个),这等价于每个元素做打头元素,后续的子序列的全排列,而for循环就是体现这一点。' D( Y/ p. K2 `: W# R
2.关于输出:一开始我怎么也找不到输出的好办法!第一是尝试在下一层递归前输出字符,发现不行;后来在递归回来后再输出一次,还是不行……总之尝试了很多次都没有效果。最后从另一位大神中才想到有直接输出字符串的控制符!坑呐,说明自己对语法不够熟练,加紧练习!
& y# O( K4 {0 `6 J; ]" f3 T2 Q- E7 j/ f$ P( z" e/ g
# L; y6 U" ? l
2 _! M3 n9 V$ H6 w
|
zan
|