蓝桥杯模拟题-排列序数

时间:2021-12-15 11:12:06

标题: 排列序数

X星系的某次考古活动发现了史前智能痕迹。
这是一些用来计数的符号,经过分析它的计数规律如下:
(为了表示方便,我们把这些奇怪的符号用a~q代替)

abcdefghijklmnopq 表示0
abcdefghijklmnoqp 表示1
abcdefghijklmnpoq 表示2
abcdefghijklmnpqo 表示3
abcdefghijklmnqop 表示4
abcdefghijklmnqpo 表示5
abcdefghijklmonpq 表示6
abcdefghijklmonqp 表示7
…..

在一处石头上刻的符号是:
bckfqlajhemgiodnp

请你计算出它表示的数字是多少?

请提交该整数,不要填写任何多余的内容,比如说明或注释。

答案:22952601027516

康托展开

#include"iostream"
#include"algorithm"
typedef long long ll;
using namespace std;

ll jiec(int n)
{
if(n==1) return 1;

return n*jiec(n-1);

}
int main()
{
bool sign[20]={0};
//char bi[20]={"abcdefghijklmnopq"};
char ai[20]={"bckfqlajhemgiodnp"};
ll sum=0;
for(int i=0;i<16;i++)
{
int num=0;
for(int j=0;j<(ai[i]-'a');j++)
if(!sign[j])
num++;
sum+=(num)*jiec(16-i);
sign[ai[i]-'a']=true;
}
cout<<sum<<endl;
return 0;
}

写的心里没底,这种题