蓝桥杯 算法提高 排列数

来源:互联网 发布:linux连不通数据库端口 编辑:程序博客网 时间:2024/05/01 02:00
问题描述
  0、1、2三个数字的全排列有六种,按照字母序排列如下:
  012、021、102、120、201、210
  输入一个数n
  求0~9十个数的全排列中的第n个(第1个为0123456789)。
输入格式
  一行,包含一个整数n
输出格式
  一行,包含一组10个数字的全排列
样例输入
1
样例输出
0123456789
数据规模和约定
  0 < n <= 10!
源代码如下:
#include<stdio.h>  #include<string.h>  long long n,sum;  int vis[10];  int nArray[10];  void dfs(int pos)  {   int i;    if(pos==10)      {          sum++;          if(sum==n)          {              for(i=0; i<10; i++)                  printf("%d",nArray[i]);              printf("\n");          }      }      for(i=0; i<=9; i++)      {          if(!vis[i])          {              nArray[pos]=i;              vis[i]=1;              dfs(pos+1);              vis[i]=0;          }      }  }  int main()  {      while(~scanf("%lld",&n))      {          memset(vis,0,sizeof(vis));          sum=0;          dfs(0);      }          return 0;  } 
运行截图:
蓝桥杯的测试系统结果:


1 0
原创粉丝点击