- 在线时间
- 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
- 自我介绍
- 往往
 |
4 E$ z. j( D7 Z9 J2 J- {9 u
$ T' z7 Q# c6 _2 A F& x/ l4 o" H2 f+ Q! g$ M8 j
/*
' y/ V6 }/ f- v3 K) H5 E# Z使用递归方法求全排列1 ?- [7 ]# y4 @
*/* ^ O" g5 A3 u, d8 n, q# X
) w0 Q$ M- }( F+ w" v. I% ^. m% H#include<stdio.h>0 p& d/ D2 u, E( s M+ _' p
( W! ]3 F" u1 r& P2 C0 C
int sum=0;
) Y, U9 z, Y1 d9 f- I" y. `/ Wint main(){8 O& t3 k; ~0 i) {
int n,i;
1 C! V5 h8 U& s4 q. a char *p;. R! [. A: }$ ~
void perm(char *,int,int);
7 `8 p+ P0 M& U/ L2 x: H- j1 t' f9 l( c3 }( t
scanf("%d",&n);0 w& l! ]5 C- G8 Z L* \
p=new char[n]; Z) r5 N& A* {' V2 a9 D
for(i=0;i<n;i++){- H" |+ M2 g- A0 ~/ i. J; n1 K
getchar();/ ?) K+ y ]! d) b
scanf("%c",p+i);
2 K& O! |* _7 X+ c& b B9 | }
. _+ J. N, L1 d) e5 k7 y2 G1 W3 a5 s& s3 p2 l- f) Z
perm(p,0,n-1);
6 m" z3 v" o. b1 R4 N" { printf("==>%d",sum);/ |* c" R! p* K# Z9 k
8 X9 d* s* l% t5 n" m return 0;# g# p9 R* z; j) E$ g2 Z
}
8 p0 |: P% S" x8 z- r# F" N
: w( }5 N$ A( Q$ H2 g9 d9 u/ ~void perm(char *p,int s,int e){
7 H+ s: ]2 `) k! X7 S' H int i;# ~" l- y; N# Z7 V0 f
void swap(char*,char*);
) }% L# q: O3 c2 q) b5 _4 G' y9 L
% C* k1 w2 m- q/ \' I if(s==e){6 q0 S: B& @3 f" E0 X, y) @( ] U
printf("%s\n",p);
5 _8 n9 B. ?1 k6 h7 f6 k sum++;
! h. ?; E. N5 h) p8 B return ;
* a" y- R0 C- z% {& B, ` }5 K6 t3 F1 X/ k
else{
2 }9 X1 d8 Q g# _( Y3 O6 u" q for(i=s;i<=e;i++){3 D7 i! u% h* [
swap(p+s,p+i);
4 F# Q. U Y6 Q perm(p,s+1,e);* G2 ^0 f B/ m
swap(p+s,p+i);2 D( z5 [8 B! Q) m" E
}& a0 j8 S8 S3 f3 i3 c- k
}2 g ~9 v/ Q% X& C, P& { c
}; g/ Q( e5 B. R# D. J0 C5 b$ d5 a
) K# s9 L. N- }9 ?
void swap(char *a,char *b){' Z/ j3 `7 B( G8 p% t4 l8 {
int tmp=*a;% F5 k( z& n% N
*a=*b;
, L. K% T8 c+ s. P- q2 ^$ j9 Q0 P *b=tmp;- s9 ]7 T4 v( U7 G9 j
}2 d$ k: x) W7 T. T1 e
' Z; }9 k1 _ o. h2 p======================================================================5 _ Q K( d. H* k9 v5 L
1.关于思路:当仅有一个元素时,全排列就是它自己本身一个;对于多个元素的序列,其全排列为去掉某个元素的全排列,再在这些全排列序列中加入该元素(如果某一个排列序列包含n个元素,那么加入的方案就有n+1个),这等价于每个元素做打头元素,后续的子序列的全排列,而for循环就是体现这一点。
4 W* Q- ~6 \4 Q! R 2.关于输出:一开始我怎么也找不到输出的好办法!第一是尝试在下一层递归前输出字符,发现不行;后来在递归回来后再输出一次,还是不行……总之尝试了很多次都没有效果。最后从另一位大神中才想到有直接输出字符串的控制符!坑呐,说明自己对语法不够熟练,加紧练习!
' b/ ]& x* f$ Y) W1 ?( }1 o
. o- S4 f: m! \$ i" L/ I# @8 Q. b0 S
8 B. b! ^( n, @) Y/ l
0 F2 Q, `/ y+ k% F |
zan
|