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;
}

 

 
posted @ 2015-01-27 19:40  我喜欢旅行  阅读(812)  评论(0编辑  收藏  举报