zoukankan      html  css  js  c++  java
  • C语言 · 排列数

    算法提高 排列数  
    时间限制:1.0s   内存限制:256.0MB
        
    问题描述
      0、1、2三个数字的全排列有六种,按照字母序排列如下:
      012、021、102、120、201、210
      输入一个数n
      求0~9十个数的全排列中的第n个(第1个为0123456789)。
    输入格式
      一行,包含一个整数n
    输出格式
      一行,包含一组10个数字的全排列
    样例输入
    1
    样例输出
    0123456789
    数据规模和约定
      0 < n <= 10!
     
     1 #include<stdio.h>  
     2 #include<string.h>  
     3 long long n,sum;  
     4 int label[10];//用来标记数字i是否被用了,即是否已被放在了排列中  
     5 int a[10];
     6 void SouSuo(int pos){  
     7     if(pos==10){  //表示当前数组a中已有10个数字  
     8         sum++;  
     9         if(sum==n){  
    10             for(int i=0; i<10; i++)
    11                 printf("%d",a[i]); 
    12         }
    13     }
    14     for(int i=0; i<=9; i++){//枚举数字0到数字9
    15         if(!label[i]){//若数字i还没被放在当前排列中
    16             a[pos]=i;//将i赋给当前排列a数组的第pos位置  
    17             label[i]=1;//数字i已放入排列中,标记为1  
    18             SouSuo(pos+1);//继续搜索下一个位置  
    19             label[i]=0;//清除标记  
    20         }  
    21     }  
    22 }  
    23 int main(){  
    24     scanf("%d",&n);
    25     if(n==0){
    26         return 0;
    27     }
    28     memset(label,0,sizeof(label));//给标记赋初值0 
    29     sum=0;  
    30     SouSuo(0);  
    31     return 0;  
    32 }  
  • 相关阅读:
    加载中动画
    跑步动画
    关键帧动画
    animate.css
    怪异盒子
    弹性项目属性
    改变元素大小
    Linux 文件系统 --磁盘I/O
    Linux 文件系统
    Sample Test Strategy
  • 原文地址:https://www.cnblogs.com/panweiwei/p/6430527.html
Copyright © 2011-2022 走看看