zoukankan      html  css  js  c++  java
  • 康托逆展开

    刚才学弟问,不好意思说不知道康托逆展开是个什么东西= =。然后硬着头皮百度了一下,找到了思路,顺手就敲了一下,发上来吧:

    求n个数的第m大的全排列。

    思路链接:

    戳这里。。。

    代码贴出来 :简单的写下注释。。0.0

     1 #include <iostream>
     2 using namespace std;
     3 const int MAXN = 13;
     4 int num[MAXN];
     5 int jie[12]={1, 1, 2, 6, 24, 120, 720, 5040, 40320, 362880, 3628800, 39916800};//阶乘存起来省的写函数计算了
     6 void init()
     7 {
     8     for (int i = 0; i < MAXN; ++i)
     9     {
    10         num[i]=i;
    11     }
    12 }
    13 void kt_sequence(int n,int m)
    14 {
    15     if(n<1)return;
    16     int x=m-1;
    17     int a,b,i;
    18     a=x/jie[n-1];
    19     b=x%jie[n-1];
    20     int temp=0;
    21     for(i=0;i<MAXN;++i)        //有a个数比他小的数的位置求出来
    22     {
    23         if(temp==a+1)break;
    24         if(num[i]!=0)temp++;
    25     }
    26     cout<<num[i-1];
    27 
    28     num[i-1]=0;                //记得输出过的数要标记下,剔除
    29 
    30     kt_sequence(n-1,b+1);
    31 
    32 }
    33 int main()
    34 {
    35     int n,m;
    36     
    37     while(cin>>n>>m)
    38     {
    39         init();                //num数组存n个数,方便求位置
    40         
    41         kt_sequence(n,m);
    42         cout<<endl;
    43     }
    44     return 0;
    45 }
  • 相关阅读:
    sql中触发器的使用
    sql中优化查询
    sql中case when语句的使用
    CSRF学习小结
    javascript正则表达式笔记
    elementUI单选框获取值
    elementUI内置过渡(折叠)
    elementUI内置缩放过渡(缩放)
    elementUi内置过渡动画(淡入)
    创建koa2项目
  • 原文地址:https://www.cnblogs.com/sylvialucy/p/4905941.html
Copyright © 2011-2022 走看看