排列序数

来源:互联网 发布:淘宝零食销量排行 编辑:程序博客网 时间:2024/04/28 21:27
 排列序数
 * X星系的某次考古活动发现了史前智能痕迹。
 * 这是一些用来计数的符号,经过分析它的计数规律如下:
 *(为了表示方便,我们把这些奇怪的符号用a~q代替)
 * abcdefghijklmnopq 表示0
 * abcdefghijklmnoqp 表示1
 * abcdefghijklmnpoq 表示2
 * abcdefghijklmnpqo 表示3
 * abcdefghijklmnqop 表示4
 * abcdefghijklmnqpo 表示5
 * abcdefghijklmonpq 表示6
 * abcdefghijklmonqp 表示7
 * .....
 * 在一处石头上刻的符号是:
 * bckfqlajhemgiodnp
 * 请你计算出它表示的数字是多少?

 * 请提交该整数,不要填写任何多余的内容,比如说明或注释。

代码如下:

import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner sc = new Scanner(System.in);String s = sc.nextLine();int q[] = new int[17]; // q[]表示的是i个字母全排列q[0] = 1;for (int i = 1; i < 17; i++){q[i] = i * q[i - 1]; // i个字母的全排列等于i的阶乘}int sum = 0; // 表示该串在其字母所有排列生成的串中的序号for (int i = 0; i < s.length(); i++){int k = 0; // k表示有多少个小的在前面for (int j = 0; j < i; j++){if (s.charAt(j) < s.charAt(i))k++;}sum = sum + q[s.length() - i - 1] * (s.charAt(i) - 'a' - k);// q[s.length()-i-1]表示第i个字母后面还有几个字母,如bdca中的b字母后还有dca三个字母// s.charAt(i)-'a'-k// 表示用当前字母减去‘a’,再减去前面比这个字母小的字母的个数,比如如bdca中的b字母前还有a这一个字母。}System.out.println(sum);}}


1 0
原创粉丝点击