sdut oj 1163 C语言实验——排列 (当初不会递归生成排列,这个题目现在才补上 刘汝佳给出了写法 *【模板】 当然有生成全排列的函数存在 )
C语言实验——排列
Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^
题目描述
有4个互不相同的数字,请按序输出由其中三个不重复数字组成的排列。
输入
4个整数。
输出
所有排列,输出顺序见样例。
示例输入
1 2 3 4
示例输出
1 2 3 1 3 2 2 1 3 2 3 1 3 1 2 3 2 1 1 2 4 1 4 2 2 1 4 2 4 1 4 1 2 4 2 1 1 3 4 1 4 3 3 1 4 3 4 1 4 1 3 4 3 1 2 3 4 2 4 3 3 2 4 3 4 2 4 2 3 4 3 2
也许是很可笑吧,大一就该学会的题目,我是到现在才做,不过至少我还没放弃和忘记!
俞敏洪说:爬上金字塔的有两种生物,一是雄鹰,靠自身的天分就可以飞得很高,登上金字塔的顶峰是轻而易举的。
还有一种生物是蜗牛,靠着一股毅力和信心,它一样可以爬到金字塔的顶峰,只要它还在努力,只要它还没放弃,一
切都还有希望!
希望每个在向成功路上奋斗的每个人都会像蜗牛那样继续坚持下去!终有一天会登顶金字塔,看到别人看不到的人
生风景。
代码:
#include <stdio.h> #include <string.h> #include <stdlib.h> #include <ctype.h> #include <limits.h> #include <algorithm> using namespace std; int a[4]; void Print_permutation(int n, int *a, int *c, int cur ) { int i, j; if(cur==n) { for(i=0; i<n; i++) { if(i==0) printf("%d", a[i] ); else printf(" %d", a[i]); } printf("\n"); } else { for(i=0; i<3; i++) { int ok=1; for(j=0; j<cur; j++) { if(a[j]==c[i] ) ok=0; } if(ok) { a[cur]=c[i]; Print_permutation(n, a, c, cur+1 ); } } } } int main() { int i, j; for(i=0; i<4; i++) scanf("%d", &a[i] ); int b[3]; int c[3]; b[0]=a[0]; b[1]=a[1]; b[2]=a[2]; //1 2 3 for(i=0; i<3; i++) c[i]=b[i]; Print_permutation(3, b, c, 0); b[0]=a[0]; b[1]=a[1]; b[2]=a[3]; //1 2 4 for(i=0; i<3; i++) c[i]=b[i]; Print_permutation(3, b, c, 0); b[0]=a[0]; b[1]=a[2]; b[2]=a[3]; //1 3 4 for(i=0; i<3; i++) c[i]=b[i]; Print_permutation(3, b, c, 0); b[0]=a[1]; b[1]=a[2]; b[2]=a[3]; //2 3 4 for(i=0; i<3; i++) c[i]=b[i]; Print_permutation(3, b, c,0); return 0; }