标题: 排列序数

来源:互联网 发布:外国男友性观念知乎 编辑:程序博客网 时间:2024/05/16 19:32
X星系的某次考古活动发现了史前智能痕迹。
这是一些用来计数的符号,经过分析它的计数规律如下:
(为了表示方便,我们把这些奇怪的符号用a~q代替)


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


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


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


请提交该整数,不要填写任何多余的内容,比如说明或注释。
分析:这题是有规律可循的,每个字符串代表的数值就是它得到每位字母之前经历的变换次数,而且是符合阶乘的规律的。即第一位的字符从a变为b则是16的阶乘(一共17位字符),把每位的数值加起来就是最终的结果了。
#include <stdio.h>#define M 17void value(char *s,int *num)  //技术字符串S中每个字母在二十六个子母中排几位,并且记录在数组num中 {int i=0,j=0;int count=0;for(i=0;i<M;i++){count=0;for(j=i+1;j<M;j++){if(s[i]>s[j]){count++;}}num[i] = count;}}long factor(int num)  //求num的阶乘 {if(num==0&&num==1){return 1;}int i=0;int result=1;for(i=1;i<=num;i++){result*=i;}return result;}int main(void){char s[] = "bckfqlajhemgiodnp";int num[M] = {0};long count=0;int i=0,j=0;value(s,num);for(i=M-1,j=0;i>=0;i--,j++){count += num[i]*factor(j);}printf("%-9d",count);return 0;}

1 0
原创粉丝点击