java实现排列序数
X星系的某次考古活动发现了史前智能痕迹。
这是一些用来计数的符号,经过分析它的计数规律如下:
(为了表示方便,我们把这些奇怪的符号用a~q代替)
abcdefghijklmnopq 表示0
abcdefghijklmnoqp 表示1
abcdefghijklmnpoq 表示2
abcdefghijklmnpqo 表示3
abcdefghijklmnqop 表示4
abcdefghijklmnqpo 表示5
abcdefghijklmonpq 表示6
abcdefghijklmonqp 表示7
…
在一处石头上刻的符号是:
bckfqlajhemgiodnp
请你计算出它表示的数字是多少?
请提交该整数,不要填写任何多余的内容,比如说明或注释。
22952601027516
//简易求解
public class Main1 {
public static long count = 0L;
public static boolean[] used = new boolean[17];
public static long getMultiN(int n) {
if(n == 0)
return 1;
long result = 1L;
for(int i = 1;i <= n;i++)
result = result * i;
return result;
}
public static void main(String[] args) {
String A = "bckfqlajhemgiodnp";
for(int i = 0;i < 17;i++)
used[i] = false;
for(int i = 0;i < A.length();i++) {
int temp = A.charAt(i) - 'a';
used[temp] = true;
int num = 0;
for(int j = 0;j < temp;j++) {
if(used[j] == false)
num++;
}
count = count + num * getMultiN(16 - i);
}
System.out.println(count);
}
}
//求解全排列,由于10位以上就会超时,以下经过一点处理,以下代码仅仅是记录楼主自己当时做题的思考过程,仅仅提供参考~
public class Main {
public static long count = 0L;
public void swap(char[] A, int a, int b) {
char temp = A[a];
A[a] = A[b];
A[b] = temp;
}
public boolean judge(char[] A) {
for(int i = 1;i < A.length;i++) {
if(A[i - 1] < A[i])
return true;
}
return false;
}
public int getI(char[] A) {
int maxi = A.length - 2;
for(int i = A.length - 1;i >= 1;i--) {
if(A[i - 1] < A[i]) {
maxi = i - 1;
break;
}
}
return maxi;
}
public int getJ(char[] A) {
int j = getI(A);
char value = A[j];
j++;
for(;j < A.length;j++) {
if(A[j] < value) {
j = j - 1;
break;
}
}
if(j == A.length)
j = j - 1;
return j;
}
public void reverseArray(char[] A, int start, int end) {
while(start < end) {
char temp = A[start];
A[start++] = A[end];
A[end--] = temp;
}
}
//字典序排列
public void printResult1(char[] A) {
String B = "hemgiodnp";
char[] arrayB = B.toCharArray();
while(judge(A)) {
int i = getI(A);
int j = getJ(A);
swap(A, i, j);
reverseArray(A, i + 1, A.length - 1);
count++;
int k = 0;
for(;k < A.length;k++) {
if(arrayB[k] != A[k])
break;
}
if(k == A.length) {
System.out.println("最终结果:"+count);
break;
}
}
}
public static long getN(int n) {
long sum = 1L;
for(int i = 1;i <= n;i++)
sum *= i;
return sum;
}
public static void main(String[] args) {
Main test = new Main();
count = count + getN(16) + getN(15) + 8 * getN(14) + 3 * getN(13) + 12 * getN(12) + 7 * getN(11) + 5 * getN(9);
String A = "deghimnop";
char[] arrayA = A.toCharArray();
test.printResult1(arrayA);
}
}
java实现排列序数的更多相关文章
- java实现第五届蓝桥杯排列序数
排列序数 如果用a b c d这4个字母组成一个串,有4!=24种,如果把它们排个序,每个串都对应一个序号: abcd 0 abdc 1 acbd 2 acdb 3 adbc 4 adcb 5 bac ...
- Java字符串排列算法
Java字符串排列算法 题目:现有ABCDE 5个球 构成的排列组合 可重复抽取 最多取到16个 共有多少种组合方式? 比如:取1个球可以构成的组合有 A B C D E 共5种,取2个球可以构成的组 ...
- java实现排列组合(通俗易懂)
个人感觉这篇文章(原文地址见文章尾)写的排列组合问题,非常的好,而且是一步一步引出排列组合问题,我也是看了这篇文章,一步一步按照这个思路来,最后会了自己的一套排列组合 也因此在算法竞赛中,两次用到了, ...
- java实现排列为平方数
** 排列为平方数** 若干不同的数字,排列组合后能产生多少个平方数? 下面的代码解决了这个问题. 对于:1,6,9 排列后,可产生3个平方数: 169 196 961 请阅读下面的代码,填写缺失的部 ...
- 算法笔记_206:第五届蓝桥杯软件类决赛真题(Java语言A组)
目录 1 海盗分金币 2 六角幻方 3 格子放鸡蛋 4 排列序数 5 幂一矩阵 6 供水设施 前言:以下代码仅供参考,若有错误欢迎指正哦~ 1 海盗分金币 有5个海盗,相约进行一次帆船比赛. 比 ...
- 算法笔记_127:蓝桥杯2017模拟赛-本科组习题解答(Java)
目录 1 算年龄 2 猜算式 3 排列序数 4 字符串比较 5 还款计算 6 滑动解锁 7 风险度量 PS:以下代码部分仅供参考,若有不当之处,还请路过同学指出哦~ 1 算年龄 标题:算年龄 英 ...
- 2.1JAVA基础复习——JAVA语言的基础组成注释和常量变量
JAVA语言的基础组成有: 1.关键字:被赋予特殊含义的单词. 2.标识符:用来标识的符号. 3.注释:用来注释说明程序的文字. 4.常量和变量:内存存储区域的表示. 5.运算符:程序中用来运算的符号 ...
- 【aliyun】学java,看这里,不迷茫!1460道Java热门问题
阿里极客公益活动: 或许你挑灯夜战只为一道难题 或许你百思不解只求一个答案 或许你绞尽脑汁只因一种未知 那么他们来了,阿里系技术专家来云栖问答为你解答技术难题了 他们用户自己手中的技术来帮助用户成长 ...
- 2014年第五届蓝桥杯国赛试题(JavaA组)
1.结果填空 (满分15分)2.结果填空 (满分45分)3.代码填空 (满分30分)4.程序设计(满分30分)5.程序设计(满分80分)6.程序设计(满分100分) 1.标题:海盗分金币 有5个海盗, ...
随机推荐
- 配置类为什么要添加@Configuration注解呢?
配置类为什么要添加@Configuration注解呢? 本系列文章: 读源码,我们可以从第一行读起 你知道Spring是怎么解析配置类的吗? 推荐阅读: Spring官网阅读 | 总结篇 Spring ...
- post请求导出表单。
postExcelFile(params, url) { //params是post请求需要的参数,url是请求url地址 var form = document.createElement(&quo ...
- 让写作省心一点——Markdown和CSS实践
1 引言 今天这篇推送和以往不太一样,乍一看就能发现格式有了变化.没错,这是我专门设计的品牌模板,也就是本公众号以后创作的文章可直接套用,获得一致的风格样式. 除此以外,文章里的全部元素(包括标题.表 ...
- debian init
1 bash_completion 默认是没有bash 自动补齐的,比如apt-get install 后面是不会自动补齐的,这个在ubuntu里面是有的,debian 里面默认没有开启 开启方法 ...
- Codeforces1183A(A题)Nearest Interesting Number
Polycarp knows that if the sum of the digits of a number is divisible by 3, then the number itself i ...
- dockerfile文档的相关参数
以上是用dockerfile来构建的nginx镜像示例. 一.构建stress压力测试软件镜像 ##(1) 以下是Dockerfile内容(ENTRYPOINT是运行的环境): FROM centos ...
- Linux下分析bin文件的10种方法
这世界有10种人,一种人懂二进制,另一种人不懂二进制. --鲁迅 大家好,我是良许. 二进制文件是我们几乎每天都需要打交道的文件类型,但很少人知道他们的工作原理.这里所讲的二进制文件,是指一些可执行文 ...
- 16-3 update语句
--打开和关闭查询窗口:ctrl+R --更新语句: --update 表名 set 列=新值,列2=新值2,... where 条件 --update语句,如果不加where条件,那么表示对表中所有 ...
- Gunicorn+Nginx+Flask项目部署
安装python3.6 1)前往用户根目录 >: cd ~ 2)下载 或 上传 Python3.6.7 >: wget https://www.python.org/ftp/python/ ...
- jsonp跨域封装
一.什么是同源政策? 同源策略是指在Web浏览器中,允许某个网页脚本访问另一个网页的数据,但前提是这两个网页必须有相同的URI.主机名和端口号,一旦两个网站满足上述条件,这两个网站就被认定为具有相同来 ...