- 在线时间
- 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 ]8 P3 w$ {0 Y, V' l
& t3 K! o0 L( b, n& r% q! k
. t+ T, ], W4 P _! h+ ?/ c
/*8 _0 j! a# U' w. \5 G4 Z
使用递归方法求全排列
" p4 D- y) v r; U1 s' w7 g# z: @*/
8 ]5 p7 }& O+ L2 i% a# D2 o* x- F! ~, K
#include<stdio.h>" C2 n& e1 z1 S- ?
$ p7 g ?, H! m# Wint sum=0;
9 h6 A5 d: [, |- J: mint main(){
* f! c1 o! A5 \4 k# {$ S int n,i;
* O8 v6 c) a( u+ Q* _ char *p;
7 Z7 z: S3 |/ l+ A9 z' q1 T void perm(char *,int,int);( n, v* E% Z, y* S1 \
! ]/ \% ~3 e4 z& e
scanf("%d",&n);
% u7 {2 w: \/ p p=new char[n];
( s: U! O$ _( ]" T% C: {1 ] for(i=0;i<n;i++){
1 q+ j B: H( z$ d3 u getchar();
X$ d+ l; G3 z/ k# g scanf("%c",p+i);
6 Y' j! Y; n* g2 L! J }
3 j/ w" u( J/ v( e! x& Z/ N5 C1 g4 ?+ F4 h" Y
perm(p,0,n-1);2 x/ @2 t8 O. } |1 q
printf("==>%d",sum);. }$ _0 i! p- }3 p
o0 ^ t1 m: Y8 \6 q C
return 0;
1 L- ?/ k5 y* G7 g% _1 _}
8 \ l1 F, ]! B9 G4 z3 ]2 S% [, d% u6 S: \' J+ H) v
void perm(char *p,int s,int e){
; V* V! r% R4 X. F int i;
/ X) v: o% k, i! w void swap(char*,char*);
; z# B) }) l; y+ _ : r! L. B( u( q2 h& y; a/ F
if(s==e){
; U; r) C! B! `+ Q printf("%s\n",p);
& v$ f6 _4 Y' i2 T. [2 [* l. N, } sum++;
4 N% w6 i% M i9 S7 d return ;3 w$ l8 r6 d! w2 Y/ G. ~
}' h+ [7 |( ~" d/ P
else{; A! p) p8 `: g ]$ P
for(i=s;i<=e;i++){
. |7 O( \2 R9 s! \ swap(p+s,p+i);
' t8 e) C9 I4 ?& P0 U$ f7 v" f8 ` perm(p,s+1,e);9 M( ^/ {+ k! l- e
swap(p+s,p+i);5 F1 T& U4 V5 A9 a
}7 B. {- ]+ G4 L$ s; @8 M
}+ d! m" Y: K7 N, z/ F
}- n: |. G. i: S* ~! q
. I" I5 r+ e( I( n# ]5 ~0 |5 o) j I jvoid swap(char *a,char *b){
! n+ S. O9 n* C+ S# P% X6 w int tmp=*a; H6 @" n( X% u8 b5 N) Y9 a
*a=*b;' J5 }, y Z$ W0 ^
*b=tmp;
. H% ]. ~! J1 c}
! `: O* a5 v' T. C8 z
# ^- p, N# x- l" s# Q* [+ ~. `======================================================================
% v& o0 h* Z1 [4 i6 O8 [" c. n 1.关于思路:当仅有一个元素时,全排列就是它自己本身一个;对于多个元素的序列,其全排列为去掉某个元素的全排列,再在这些全排列序列中加入该元素(如果某一个排列序列包含n个元素,那么加入的方案就有n+1个),这等价于每个元素做打头元素,后续的子序列的全排列,而for循环就是体现这一点。+ P4 Z1 V2 V- X/ Q7 l* L! i
2.关于输出:一开始我怎么也找不到输出的好办法!第一是尝试在下一层递归前输出字符,发现不行;后来在递归回来后再输出一次,还是不行……总之尝试了很多次都没有效果。最后从另一位大神中才想到有直接输出字符串的控制符!坑呐,说明自己对语法不够熟练,加紧练习!0 G/ }' r& _( k6 s; j
0 W8 o+ `$ b7 X( `5 o& |. h' t) R
y3 r6 c& R$ `# i3 {# H1 y# m6 b+ ~4 h/ _4 F3 X h
|
zan
|