题目描述
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;
}