首页 > 代码库 > sdut oj 1163 C语言实验——排列 (当初不会递归生成排列,这个题目现在才补上 刘汝佳给出了写法 *【模板】 当然有生成全排列的函数存在 )

sdut oj 1163 C语言实验——排列 (当初不会递归生成排列,这个题目现在才补上 刘汝佳给出了写法 *【模板】 当然有生成全排列的函数存在 )

C语言实验——排列

Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^

题目描述

有4个互不相同的数字,请按序输出由其中三个不重复数字组成的排列。

输入

4个整数。

输出

所有排列,输出顺序见样例。

示例输入

1 2 3 4

示例输出

1 2 31 3 22 1 32 3 13 1 23 2 11 2 41 4 22 1 42 4 14 1 24 2 11 3 41 4 33 1 43 4 14 1 34 3 12 3 42 4 33 2 43 4 24 2 34 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;}

 

 

sdut oj 1163 C语言实验——排列 (当初不会递归生成排列,这个题目现在才补上 刘汝佳给出了写法 *【模板】 当然有生成全排列的函数存在 )