清华组合数学第一章经典复习题,用六种算法计算839647521后999种排列

来源:互联网 发布:淘宝里实名认证在哪 编辑:程序博客网 时间:2024/05/22 03:41

按6个算法求839647521后的第999个排列


一.字典法
   原理:将原排列数字从左到右,依次查看数字右侧比其小的数字有几个。
  
原数字  :839647521

原递增中介数:
             8右侧比8小的有7个数字(3647521)
             3右侧比3小的有2个数字(21)
             9右侧比9小的有6个数字(647521)
             6右侧比6小的有4个数字(4521)
             4右侧比4小的有2个数字(21)
             7右侧比7小的有3个数字(521)
             5右侧比5小的有2个数字(21)
             2右侧比2小的有1个数字(1)
             所以,原中介数=72642321
原序号  :7*8!+2*7!+6*6!+4*5!+2*4!+3*3!+2*2!+1*1!=297191

新序号  :297191+999=298190

新递增中介数:
         (法1)因为比序号999小的最大阶乘是6!(6!=720 7!=5040),直到余数为 0                          
              999 /6!=1余279
              279 /5!=2余39
              39  /4!=1余15
              15  /3!=2余3
              3   /2!=1余1
              1   /1!=1余0
              因此序号999的"递增进位制数"就是121211
              所以:新递增中介数=原中介数+999的递增进位制数
                               =72642321+121211
                                  765432
                               =73104210
         (法2)因为比新序号298190小的最大阶乘是8!(8!=40320 9!=362880)
              298190/8!=7余15950
              15950 /7!=3余830
              830   /6!=1余110
              110   /5!=0余110
              110   /4!=4余14
              14    /3!=2余2
              2     /2!=1余0
              0     /1!=0
              所以:新中介数=73104210
             
新数字  :  从左往右数N个空格,填上对应数字
              1 2 3 4 5 6 7 8 9
            7 _ _ _ _ _ _ _ 8      数7个空格
            3 _ _ _ 4              数3个空格
            1 _ 2                  数1个空格
            0 1                    数0个空格
            4     _   _ _ _   9    数4个空格
            2     _   _ 6          数2个空格
            1     _   5            数1个空格
            0     3                数0个空格
                          7        补7
            所以新数字为从上往下为:842196537

 

           
二.递增进位法           
   原理:将原排列按照从 9 到 2 的顺序,依次查看其右侧比其小的数字的个数。
  
原数字  :839647521

原递增中介数:
             9右侧比9小的有6个数字(647521),
             8右侧比8小的有7个数字(3647521)
             7右侧比7小的有3个数字(521)
             6右侧比6小的有4个数字(4521)
             5右侧比5小的有2个数字(21)
             4右侧比4小的有2个数字(21)
             3右侧比3小的有2个数字(21)
             2右侧比2小的有1个数字(1)
             所以,原中介数=67342221       
                            
原序号  :6*8!+7*7!+3*6!+4*5!+2*4!+2*3!+2*2!+1*1!=279905

新序号  :279905+999=280904

新递增中介数:
        (法1)因为比序号999小的最大阶乘是6!(6!=720 7!=5040),直到余数为 0                          
              999 /6!=1余279
              279 /5!=2余39
              39  /4!=1余15
              15  /3!=2余3
              3   /2!=1余1
              1   /1!=1余0
              因此序号999的"递增进位制数"就是121211
              所以:新递增中介数=原中介数+999的递增进位制数
                               =67342221+121211
                                  765432
                               =67504110
                              
             
         (法2)因为比新序号280904小的最大阶乘是8!(8!=40320 9!=362880)
              280904/8!=6余38984
              38984 /7!=7余3704
              3704  /6!=5余104
              104   /5!=0余104
              104   /4!=4余8
              8     /3!=1余2
              2     /2!=1余0
              0     /1!=0
              所以:新中介数=67504110
             
新数字  : 从空格的右侧向左数,从9填到2,最后一个空格里补1.
              9 8 7 6 5 4 3 2 1              
           6      9 _ _ _ _ _ _   从右向左数6个空格,填9
           7  8 _   _ _ _ _ _ _   从右向左数7个空格,填8
           5        7 _ _ _ _ _   从右向左数5个空格,填7
           0                  6   从右向左数0个空格,填6
           4    5     _ _ _ _     从右向左数4个空格,填5
           1              4 _     从右向左数1个空格,填4
           1            3   _     从右向左数1个空格,填3
           0                2     从右向左数0个空格,填2
                      1           补1
           所以新数字从左往右为: 859713426
                                

 

三.递减进位法
   原理:将原排列按照从 2 到 9 的顺序,依次查看其右侧比其小的数字的个数。
  
原数字  :839647521

原递减中介数:
         2右侧比2小的有1个数字(1),
         3右侧比3小的有2个数字(21)
         4右侧比4小的有2个数字(21)
         5右侧比5小的有2个数字(21)
         6右侧比6小的有4个数字(4521)
         7右侧比7小的有3个数字(521)
         8右侧比8小的有7个数字(3647521)
         9右侧比9小的有6个数字(647521)
         所以,原中介数=12224376           
                    
原序号:  (2 3 4 5 6 7 8 9)
         (1 2 2 2 4 3 7 6)
          1*3+2)4+2)5+2)6+4)7+3)8+7)9+6 =340989
               
新序号  :340989+999=341988

新递减中介数:
        (法1):序号999除以9所得余数就是"递减进位制数"的最末位;商继续除8... 一直除到"商0"                    
              999 /9=111余0
              111 /8=13 余7
              13  /7=1  余6
              1   /6=0  余1             
              因此序号"999"的"递减进位制数"就是1670
              所以:新递减中介数=原中介数+999的递增减位制数
                               =12224376+1670
                                  456789
                               =12230366
         (法2)新序号341988除以9所得余数就是"递减进位制数"的最末位;商继续除8... 一直除到"商0"
              341988/9=37998余6
              37998 /8=4749 余6
              4749  /7=678  余3
              678   /6=113  余0
              113   /5=22   余3
              22    /4=5    余2
              5     /3=1    余2
              1     /2=0    余1
              所以:新递减中介数=12230366
             
新数字  : 从空格的右侧向左数,从9填到2,最后一个空格里补1.
              9 8 7 6 5 4 3 2 1              
           6      9 _ _ _ _ _ _   从右向左数6个空格,填9
           6    8 _ _ _ _ _ _ _   从右向左数6个空格,填8
           3            7 _ _ _   从右向左数3个空格,填7
           0                  6   从右向左数0个空格,填6
           3        5 _   _ _     从右向左数3个空格,填5
           2          4   _ _     从右向左数2个空格,填4
           2  3           _ _     从右向左数2个空格,填3
           1              2 _     从右向左数1个空格,填2
                            1     补1
           所以新数字从左往右为: 389547216

 


      
四.循环左移
原理:将原排列按照从 9 到 2 的顺序.对于9产生的中介数字依然是9的右边比 9小的数字的个数.
     但从8开始一直到2依次查看其左侧比其小的数字的个数,说不定要绕一圈。
    
原数字  :839647521

原递减中介数:
         9右侧比     9小的有6个数字(647521)
         9到8左循环比8小的有1个数字(3) 
         8到7左循环比7小的有3个数字(521)       
         7到6左循环比6小的有1个数字(4)
         6到5左循环比5小的有3个数字(321)
         5到4左循环比4小的有0个数字
         4到3左循环比3小的有0个数字
         3到2左循环比2小的有1个数字(1)
         所以,原递减中介数=10031316   
                           
原序号:
         (2 3 4 5 6 7 8 9)
         (1 0 0 3 1 3 1 6)
          1*3+0)4+0)5+3)6+1)7+3)8+1)9+6 =191247
         
新序号  :191247+999=192246

新递减中介数:
        (法1):序号999除以9所得余数就是"递减进位制数"的最末位;商继续除8... 一直除到"商0"                    
              999 /9=111余0
              111 /8=13 余7
              13  /7=1  余6
              1   /6=0  余1             
              因此序号"999"的"递减进位制数"就是1670
              所以:新递减中介数=原中介数+999的递增减位制数
                               =10031316+1670
                                  456789
                               =10033306                      
         (法2)新序号192246除以9所得余数?    
              192246/9=21360余6
              21360 /8=2670 余0              
              2670  /7=381  余3     
              381   /6=63   余3     
              63    /5=12   余3     
              12    /4=3    余0     
              3     /3=1    余0     
              1     /2=0    余1     
              所以:新递减中介数=10033306     
     
新数字  : 从空格的右侧向左数,从9填到2,最后一个空格里补1.
              9 8 7 6 5 4 3 2 1              
           6      9 _ _ _ _ _ _   从右向左数6个空格,填9
           0    8                 从9向左循环0个   ,填8
           3  _           7 _ _   从8向左循环3个   ,填7             
           3  6     _ _ _         从7向左循环3个   ,填6
           3          5   _ _ _   从6向左循环3个   ,填5
           0        4             从5向左循环0个   ,填4
           0                  3   从4向左循环0个   ,填3
           1             2  _     从3向左循环1个   ,填2
                            1     补1
           所以新数字从左往右为:  689452713


  
          
五.邻位对换法
原理:   
    记住:偶向左,奇向右;2的方向一定是向左.
    从 2 开始确定每一个数字的方向性
    i为大于2的数字:
       (1)如果i为奇数,其方向性为 b(i-1)的奇偶性
       (2)如果i为偶数,其方向性为 b(i-1)+b(i-2)的奇偶性  
             
原数字  :839647521   

原递减中介数:
       2的方向左,背向2的方向中比2小的数字有1个(1),                      ,b2=1
       3的方向(b2=1为奇)向右,       背向3方向中比3小的数字有0个,       ,b3=0
       4的方向(b2+b3=1+0=1为奇)向右,背向4方向中比4小的数字有1个(3)      ,b4=1
       5的方向(b4=1为奇)向右,       背向5方向中比5小的数字有2个(34)     ,b5=2
       6的方向(b4+b5=1+2=3为奇)向右,背向6方向中比6小的数字有1个(3)      ,b6=1
       7的方向(b6=1为奇)向右,       背向7方向中比7小的数字有3个(364)    ,b7=3
       8的方向(b6+b7=1+3=4为偶)向左,背向8方向中比8小的数字有7个(3647521),b8=7
       9的方向(b8=7)为奇向右,       背向9方向中比9小的数字有2个(83)     ,b9=2
       所以,原递减中介数=10121372
      
原序号:                                           
         (2 3 4 5 6 7 8 9)                        
         (1 0 1 2 1 3 7 2)                                 
          1*3+0)4+1)5+2)6+1)7+3)8+7)9+2 =203393   

新序号:  203393+999=204392

新递减中介数:
        (法1):序号999除以9所得余数就是"递减进位制数"的最末位;商继续除8... 一直除到"商0"                    
              999 /9=111余0
              111 /8=13 余7
              13  /7=1  余6
              1   /6=0  余1             
              因此序号"999"的"递减进位制数"就是1670
              所以:新递减中介数=原中介数+999的递增减位制数     
                               =10121372+1670    
                                  456789
                               =10123362
        (法2)新序号204393除以9所得余数  
              204392/9=22710余2
              22710 /8=2838 余6              
              2838  /7=405  余3     
              405   /6=67   余3     
              67    /5=13   余2     
              13    /4=3    余1     
              3     /3=1    余0    
              1     /2=0    余1   
              所以:新递减中介数=10123362   

新数字  :  
           (b2 b3 b4 b5 b6 b7 b8 b9)
           (1  0  1  2  3  3  6  2 )  
                 
           以从 9 到 2 的填充顺序依次计算他们的位置。
                9 8 7 6 5 4 3 2 1              
           2                9 _ _ <--   9的方向(b8=6为偶)       向左,数2个空格,填9
           6      8 _ _ _ _   _ _ <--   8的方向(b7+b6=3+3=6为偶)向左,数6个空格,填8
           3--> _   _ _ 7               7的方向(b6=3为奇)       向右,数3个空格,填7
           3--> _   _ _   6             6的方向(b5+b4=2+1=3为奇)向右,数3个空格,填6
           2--> _   _ 5                 5的方向(b4=1为奇)       向右,数2个空格,填5
           1--> _   4                   4的方向(b3+b2=0+1=1为奇)向右,数1个空格,填4
           0--> 3                       3的方向(b2=1为奇)       向右,数0个空格,填3
           1                  2 _ <--   2的方向必为向左             ,数1个空格,填2
                                1       补1
                                      
           所以新数字从左往右为:  384576921

                                                                                       
六.循环左右移                                                                          
    记住:偶向左,奇向右;2的方向一定是向左.
    从 2 开始确定每一个数字的方向性.
    i为大于2的数字:
       (1)如果i为奇数,其方向性为 b(i-1)的奇偶性
       (2)如果i为偶数,其方向性为 b(i-1)+b(i-2)的奇偶性  
    确定数字的方向性决定了搜索左循环区间还是右循环区间,说不定要绕一圈.

原数字  :839647521   

原递减中介数:
       2的方向左,背向2的方向到3的区间[18]比2小的数字有1个(1),                    ,b2=1
       3的方向(b2=1为奇)向右,       背向3方向到4的区间[81257]比3小的数字有2个(12),b3=2      
       4的方向(b2+b3=1+2=3为奇)向右,背向4方向到5的区间比4小的数字有3个(312)      ,b4=3
       5的方向(b4=3为奇)向右,       背向5方向到6的区间比5小的数字有1个(4)        ,b5=1      
       6的方向(b4+b5=3+1=4为偶)向左,背向6方向到7的区间比6小的数字有1个(4)        ,b6=1      
       7的方向(b6=1为奇)向右,       背向7方向到8的区间比7小的数字有3个(463)      ,b7=3
       8的方向(b6+b7=1+3=4为偶)向左,背向8方向到9的区间比8小的数字有1个(3)        ,b8=1
       9的方向(b8=1)为奇向右,       背向9方向到边界比9小的数字有2个(38)          ,b9=2
       所以,原递减中介数=12311312

原序号:                                           
         (2 3 4 5 6 7 8 9)                        
         (1 2 3 1 1 3 1 2)                                 
          1*3+2)4+3)5+1)6+1)7+3)8+1)9+2 = 351515
      
新序号:  351515+999=352514      
        
新递减中介数:
        (法1):序号999除以9所得余数就是"递减进位制数"的最末位;商继续除8... 一直除到"商0"                    
              999 /9=111余0
              111 /8=13 余7
              13  /7=1  余6
              1   /6=0  余1             
              因此序号"999"的"递减进位制数"就是1670
              所以:新递减中介数=原中介数+999的递增减位制数 
                               =12311312+1670    
                                  456789
                               =12313302
        (法2)新序号352514除以9所得余数  
              352514/9=39168余2
              39168 /8=4896 余0              
              4896  /7=699  余3     
              699   /6=116  余3     
              116    /5=23  余1     
              23    /4=5    余3     
              5     /3=1    余2  
              1     /2=0    余1   
              所以:新递减中介数=12313302 

新数字  :  
           (b2 b3 b4 b5 b6 b7 b8 b9)
           (1  2  3  1  3  3  0  2 )
           以从 9 到 2 的填充顺序依次计算他们的位置。
             9 8 7 6 5 4 3 2 1              
           2             9 _ _ <--   9的方向(b8=0为偶)       向左       ,数2个空格,填9
           0           8       -->   8的方向(b7+b6=3+3=6为偶)向左,从9往左数0个空格,填8
           3 _ 7           _ _ -->   7的方向(b6=3为奇)       向右,从8往右数3个空格,填7
           3 _       6     _ _ <--   6的方向(b5+b4=1+3=4为偶)向左,从7往左数3个空格,填6
           1               _ 5 -->   5的方向(b4=3为奇)       向右,从6往右数1个空格,填5
           3 _   _ _       4   -->   4的方向(b3+b2=2+1=3为奇)向右,从5往右数3个空格,填4
           2 _   _ 3           -->   3的方向(b2=1为奇)       向右,从4往右数2个空格,填3
           1 2   _             <--   2的方向必为             向左,从3往左数1个空格,填2
                 1                   补1
           所以新数字从左往右为:  271368945

0 0