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;

}

 

 

你可能感兴趣的:(C语言)