蓝桥杯决赛真题——排列序数

标题:排列序数

   如果用a b c d4个字母组成一个串,有4!=24种,如果把它们排个序,每个串都对应一个序号:

  abcd  0

  abdc  1

  acbd  2

  acdb  3

  adbc  4

  adcb  5

  bacd  6

  badc  7

  bcad  8

  bcda  9

  bdac  10

  bdca  11

  cabd  12

  cadb  13

  cbad  14

  cbda  15

  cdab  16

  cdba  17

  ...

 

    现在有不多于10个两两不同的小写字母,给出它们组成的串,你能求出该串在所有排列中的序号吗?

【输入格式】

一行,一个串。

【输出格式】

一行,一个整数,表示该串在其字母所有排列生成的串中的序号。注意:最小的序号是0

 

例如:

输入:

bdca

 

程序应该输出:

11

 

再例如:

输入:

cedab

 

程序应该输出:

70

 

 

资源约定:

峰值内存消耗(含虚拟机) < 256M

CPU消耗  < 1000ms

 

请严格按要求输出,不要画蛇添足地打印类似:“请您输入...” 的多余内容。

 

所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。

注意:不要使用package语句。不要使用jdk1.7及以上版本的特性。

注意:主类的名字必须是:Main,否则按无效代码处理。

题解:

import java.util.*;
public class Main4 {
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        String s=sc.nextLine();
        int q[]=new int[10];   //q[]表示的是i个字母全排列
        q[0]=1;
        for(int i=1;i<10;i++) {
            q[i]=i*q[i-1];  //i个字母的全排列等于i的阶乘
        }
        int sum=0;  //表示该串在其字母所有排列生成的串中的序号
        for(int i=0;i

 这是另一个程序

//输入一串字符,比如abcde,输出它的全排列

import java.util.*;
public class Main4 {
    private static ArrayList list=new ArrayList();
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        String s = sc.nextLine();  //接收输入的字符串
        char data[]=s.toCharArray();  //将输入的字符串转化为字符数组
        f(data,0);
        for(int i=0;i f(char data[],int k) {  
        StringBuffer sb=new StringBuffer();
        if(k==data.length) {
            for(int i=0;i


你可能感兴趣的:(蓝桥杯真题)