排列序数
X星系的某次考古活动发现了史前智能痕迹。
这是一些用来计数的符号,经过分析它的计数规律如下:
(为了表示方便,我们把这些奇怪的符号用a~q代替)
这是一些用来计数的符号,经过分析它的计数规律如下:
(为了表示方便,我们把这些奇怪的符号用a~q代替)
abcdefghijklmnopq 表示0
abcdefghijklmnoqp 表示1
abcdefghijklmnpoq 表示2
abcdefghijklmnpqo 表示3
abcdefghijklmnqop 表示4
abcdefghijklmnqpo 表示5
abcdefghijklmonpq 表示6
abcdefghijklmonqp 表示7
.....
abcdefghijklmnoqp 表示1
abcdefghijklmnpoq 表示2
abcdefghijklmnpqo 表示3
abcdefghijklmnqop 表示4
abcdefghijklmnqpo 表示5
abcdefghijklmonpq 表示6
abcdefghijklmonqp 表示7
.....
在一处石头上刻的符号是:
bckfqlajhemgiodnp
bckfqlajhemgiodnp
请你计算出它表示的数字是多少?
这题是一道数学题,有关全排列的(康拓展开),用字符数组来处理
答案:22952601027516(注意longlong类型)
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
typedef long long ll;
using namespace std;
ll jiecheng(int j){
ll jie=1;
if(j==0){
return 1;//0的阶乘为1
}
for(int i=1;i<=j;i++)
jie=jie*i;
return jie;
}
int main(){
int len,t;
ll sum=0;
char str[20];//定义字符数组一定要记得[]!!!!
cin>>str;//为了多组输入,可以while(scanf("%s",s)==1){.....} 来表示
len=strlen(str);
for(int i=0;i<len;i++){
t=str[i]-'a';
for(int j=0;j<i;j++){
if(str[j]<str[i])
t--;
}
sum=sum+t*jiecheng(16-i);
}
cout<<sum;
}