排列序數 康托展開)

2021-07-29 13:07:32 字數 1087 閱讀 2717

如果用a b c d這4個字母組成乙個串,有4!=24種,如果把它們排個序,每個串都對應乙個序號:

abcd 0

abdc 1

acbd 2

acdb 3

adbc 4

adcb 5

bacd 6

badc 7

bcad 8

bcda 9

bdac 10

bdca 11

cabd 12

cadb 13

cbad 14

cbda 15

cdab 16

cdba 17

現在有不多於10個兩兩不同的小寫字母,給出它們組成的串,你能求出該串在所有排列中的序號嗎?
【輸入格式】

一行,乙個串。

【輸出格式】

一行,乙個整數,表示該串在其字母所有排列生成的串中的序號。注意:最小的序號是0。

例如:

輸入:

bdca

程式應該輸出:

11再例如:

輸入:

cedab

程式應該輸出:

70資源約定:

峰值記憶體消耗 < 256m

cpu消耗 < 1000ms

康托展開:

x=an*(n-1)!+an-1*(n-2)!+…….+a1*(0)!;

其中an為在當前陣列中的排行數(從0開始)

#include

#include

#include

using

namespace

std;

char str[11];

int jiecheng[11];//用於存放階乘數

int main()

for (int i=0;i0;//找到a[i]的排名

for (int j=i;jif (str[i]>str[j])

}sum+=paiming*jiecheng[len-i-1];//康托展開式

}cout

0;}

康托展開 全排列

今天找到了一篇非常好的介紹康托展開的文章!其核心是這一張圖 letter 儲存所需字母表 void initletter 初始化字母表 int fact int n 階乘 return result void output vector v 輸出生成的結果 cout endl void divisi...

康托展開 全排列

對於n個數的全排列,共有n!中排列方式,如何求某乙個序列在整個排列中的次序 從小到大 以9的全排枚舉例 842697513是1 9全排列的第幾個?高中數學排列組合問題,只需要做到不重不漏 首先看第一位為8,那麼第一位為1 7的全排列都比它小,共有7 8!個。在第一位為8的情況下,其次看第二位為4,那...

全排列康托展開

n個元素有n 個不同的排列。將這n 個排列按字典序排列,並編號為0,1,n 1。每個排列的編號為其字典序值。例如,當n 3時,6 個不同排列的字典序值如下 0 1 2 3 4 5 123 132 213 231 312 321 任務 給定n 以及n 個元素的乙個排列,計算出這個排列的字典序值,以及按...