蓝桥杯模拟赛排列序数

排列序数

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

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

在一处石头上刻的符号是:
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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值