YTU 2845: 编程题AB-卡片游戏

来源:互联网 发布:三国杀立春套装 淘宝 编辑:程序博客网 时间:2024/05/16 14:04

2845: 编程题AB-卡片游戏

时间限制: 1 Sec  内存限制: 128 MB
提交: 30  解决: 13

题目描述

小明对数字的序列产生了兴趣:
现有许多张不同的数字卡片,用这若干张卡片能排列出很多序列,要求算出这若干张不同卡片的全排列总数,并按从小到大的顺序输出这些序列。

输入

输入数字n,表示输入数字序列个数,接着输入n个不同的数字,代表n张卡片上的数字(0<=数字<=9,1<=n<=6)。

输出

对每组卡片按从小到大的顺序输出所有能由这几张卡片组成的序列,每个序列占一行,序列中数字用空格分隔。

样例输入

31 4 2

样例输出

61 2 41 4 22 1 42 4 14 1 24 2 1

你  离  开  了  ,  我  的  世  界  里  只  剩  下  雨  。  。  。

#include <stdio.h>#include <string.h>int a[12],b[12],c[12],n;void dfs(int step){    int i;    if(step==n+1)    {        for(i=1; i<=n; i++)printf(i!=n?"%d ":"%d\n",a[i]);        return;    }    for(i=1; i<=n; ++i)        if(b[i]==0)        {            a[step]=c[i];            b[i]=1;            dfs(step+1);            b[i]=0;        }}void sort(int *a,int n){    int i,j,t;    for(i=0; i<n; i++)        for(j=0; j<n-i; j++)            if(a[j]>a[j+1])            {                t=a[j];                a[j]=a[j+1];                a[j+1]=t;            }}int main(){    scanf("%d",&n);    int sum=1, i;    memset(b,0,sizeof(b));    for(i=1; i<=n; ++i)    {        scanf("%d",a+i);        c[i]=a[i];    }    for(i=n; i>0; i--)sum*=i;    printf("%d\n",sum);    sort(a,n);    sort(c,n);    dfs(1);    return 0;}

1 0
原创粉丝点击