蓝桥杯 模拟 排列序数

时间:2021-10-15 11:12:34

题目描述

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

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

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

输入

请你计算出它表示的数字是多少?   分析 本题涉及到了康托展开    放一个介绍康托展开的链接 http://blog.csdn.net/zhongkeli/article/details/6966805   要注意的是阶乘的函数返回值为long long   储存数目的变量也要定义为long long   代码
#include <bits/stdc++.h>
using namespace std;
int vis[200];
char c[200];
long long fac(int x)
{
if(x==1)
return 1;
else
return x*fac(x-1);
}
int main()
{
long long sum;
memset(vis,
0,sizeof(vis));
int h;
while(cin>>c)
{
sum
=0;
h
=0;
int L=strlen(c);
for(int i=0;i<L-1;i++)
{
h
=0;
vis[c[i]]
=1;
for(int j='a';j<c[i];j++)
{
if(!vis[j])
h
++;
}
sum
+=(h*fac(16-i));
cout
<<" "<<sum<<endl;
}
cout
<<sum<<endl;

}
return 0;
}