问题描述
  人类终于登上了火星的土地并且见到了神秘的火星人。人类和火星人都无法理解对方的语言,但是我们的科学家发明了一种用数字交流的方法。这种交流方法是这样 的,首先,火星人把一个非常大的数字告诉人类科学家,科学家破解这个数字的含义后,再把一个很小的数字加到这个大数上面,把结果告诉火星人,作为人类的回 答。
  火星人用一种非常简单的方式来表示数字——掰手指。火星人只有一只手,但这只手上有成千上万的手指,这些手指排成一列,分别编号为1,2,3……。火星人的任意两根手指都能随意交换位置,他们就是通过这方法计数的。
  一个火星人用一个人类的手演示了如何用手指计数。如果把五根手指——拇指、食指、中指、无名指和小指分别编号为1,2,3,4和5,当它们按正常顺序排列 时,形成了5位数12345,当你交换无名指和小指的位置时,会形成5位数12354,当你把五个手指的顺序完全颠倒时,会形成54321,在所有能够形 成的120个5位数中,12345最小,它表示1;12354第二小,它表示2;54321最大,它表示120。下表展示了只有3根手指时能够形成的6个 3位数和它们代表的数字:
  三进制数
  123
  132
  213
  231
  312
  321
  代表的数字
  1
  2
  3
  4
  5
  6
  现在你有幸成为了第一个和火星人交流的地球人。一个火星人会让你看他的手指,科学家会告诉你要加上去的很小的数。你的任务是,把火星人用手指表示的数与科 学家告诉你的数相加,并根据相加的结果改变火星人手指的排列顺序。输入数据保证这个结果不会超出火星人手指能表示的范围。
输入格式
  包括三行,第一行有一个正整数N,表示火星人手指的数目(1 <= N <= 10000)。第二行是一个正整数M,表示要加上去的小整数(1 <= M <= 100)。下一行是1到N这N个整数的一个排列,用空格隔开,表示火星人手指的排列顺序。
输出格式
  只有一行,这一行含有N个整数,表示改变后的火星人手指的排列顺序。每两个相邻的数中间用一个空格分开,不能有多余的空格。
样例输入
5
3
1 2 3 4 5
样例输出
1 2 4 5 3
数据规模和约定
  对于30%的数据,N<=15;
  对于60%的数据,N<=50;
  对于全部的数据,N<=10000;

看了一个C++的代码,他用了next_permutation()函数,这题就变成水题了,但是java中没有啊,于是百度了一下,翻了好多篇博客,看到了一篇很中意的代码,套进去用,果然好用。(我还单独写了一篇博客,上一篇,有兴趣的可以去看一下),废话不多说了,本题代码如下:


import java.util.Arrays;
import java.util.Scanner;public class Main {public static void main(String[] args) {// TODO Auto-generated method stubScanner  read = new Scanner(System.in);int n = read.nextInt();//有几个手指头int m = read.nextInt();int[] array = new int[n];for(int i=0;i<n;i++){array[i] = read.nextInt();}int count = 0;do{if(count == m){for(int i =0;i<array.length;i++){System.out.print(array[i]+" ");}break;}count++;}while(nextPermutation(array));read.close();}public static boolean nextPermutation(int[] array) {//沒有下一個全排列if(array.length<=1){return false;}//从后往前找,找到第一个不满足降序的数(要考虑到重复的数字)int i = array.length-2;for(;i>=0&&array[i]>array[i+1];i--){}//没有全排列if(i==-1){return false;}//从i开始往后找到大于arr[i]的最小的数int k =i+1;for(;k<array.length&&array[k]>array[i];k++){}//交换arr[i]和arr[k-1]swap(array,i,k-1);//重新对arr[i]后面的数排序,接下来继续进行全排列操作Arrays.sort(array,i+1,array.length);return true;}public static void swap(int[] array, int i, int j) {int t =array[i];array[i] = array[j];array[j] =t;}}

蓝桥杯算法训练 星际交流java相关推荐

  1. 蓝桥杯 算法训练 星际交流

    问题描述 人类终于登上了火星的土地并且见到了神秘的火星人.人类和火星人都无法理解对方的语言,但是我们的科学家发明了一种用数字交流的方法.这种交流方法是这样 的,首先,火星人把一个非常大的数字告诉人类科 ...

  2. 蓝桥杯算法训练 礼物(java,个人想法,递归找临界点)

    蓝桥杯算法训练 礼物(java,个人想法,递归找临界点) 问题描述 JiaoShou在爱琳大陆的旅行完毕,即将回家,为了纪念这次旅行,他决定带回一些礼物给好朋友. 在走出了怪物森林以后,JiaoSho ...

  3. 蓝桥杯 算法训练 自行车停放(Java)

    问题描述: 有n辆自行车依次来到停车棚,除了第一辆自行车外,每辆自行车都会恰好停放在已经在停车棚里的某辆自行车的左边或右边.(e.g.停车棚里已经有3辆自行车,从左到右编号为:3,5,1.现在编号为2 ...

  4. Java实现 蓝桥杯VIP 算法训练 星际交流

    算法训练 星际交流 时间限制:1.0s 内存限制:256.0MB 问题描述 人类终于登上了火星的土地并且见到了神秘的火星人.人类和火星人都无法理解对方的语言,但是我们的科学家发明了一种用数字交流的方法 ...

  5. 蓝桥杯算法训练-强力党逗志芃

    持续更新蓝桥杯算法训练题解,有兴趣可以关注一波呀 题目 逗志芃励志要成为强力党,所以他将身上所以的技能点都洗掉了重新学技能.现在我们可以了解到,每个技能都有一个前提技能,只有学完了前提技能才能学习当前 ...

  6. 蓝桥杯算法训练-过河马

    蓝桥杯算法训练题解有兴趣的可以支持下. 题目 问题描述 在那个过河卒逃过了马的控制以超级超级多的走法走到了终点之后,这匹马表示它不开心了-- 于是,终于有一天,它也过河了! 由于过河马积累了许多的怨念 ...

  7. 蓝桥杯——算法训练——进击的青蛙

    问题描述 青蛙X正准备跳过一座桥,这座桥被划分为N段,记青蛙所在的起始点为0,桥的末端为N.桥上的一些点有一些石子,这些点是无法跳上去的.青蛙每次跳跃能向前跳跃+1,+2,+3段,现在请你算出跳到末端 ...

  8. 算法训练 星际交流 排列生成问题

    题目链接                                    蓝桥杯 算法训练---------题解 问题描述 人类终于登上了火星的土地并且见到了神秘的火星人.人类和火星人都无法理解 ...

  9. 蓝桥杯 算法训练 幸运的店家

    蓝桥杯 算法训练 幸运的店家 题目描述 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 炫炫开了一家商店,卖的货只有一个,XXX,XXX卖N元钱.有趣的是,世界上只有面值为3的幂的纸 ...

最新文章

  1. 聊聊这两年我用到的面试套路和收获
  2. mybatis自动扫描注解
  3. 前端基础(一):js数据类型
  4. mysql 触发器 二进制_Mysql 二进制日志格式 对存储过程,函数,触发器,事件的记录方式的影响...
  5. label用js,jquery取值赋值,以及怎么在后台取值
  6. Vmware由于centos升级内核不可运行(C header files matching your running kernel were not found)的解决方案
  7. 啊哈c语言第四章 pdf,啊哈!算法 PDF扫描版[73MB]
  8. 信号与线性系统分析 吴大正 (与电子 通信专业的同学共勉)
  9. 华为太极magisk安装教程_华为(HUAWEI)ROM安装包合集
  10. Keil MDK利用 fromelf 实现axf 转 bin 的方法
  11. ​2021年度学习清单
  12. C18-PEG-ICG18碳烷基链-聚乙二醇-吲哚菁绿,Cholesterol-PEG-ICG胆固醇-聚乙二醇-吲哚菁绿
  13. html表格打印分页无边框_excel怎么显示打印线-表格换页打印没有边框线
  14. Apple App store的应用购买限制 - 年龄
  15. duilib学习------网易云信combo控件
  16. 加州大学4.8万人大罢工!博士竟卖血为生,多校濒临崩溃!
  17. pg 快速造1000w测试数据
  18. 小强升职记梗概_《小强升职记》读书笔记一
  19. TCP系列39—拥塞控制—2、拥塞相关算法及基础知识
  20. Ext.extend 与 Ext.define

热门文章

  1. NeHe OpenGL教程 第四十八课:轨迹球
  2. 卷积网络平移不变性的探讨
  3. 存档在 ‘工具开发’ 分类
  4. 小米9能刷鸿蒙系统吗,超大乌龙之后,网友:小米真的不可能会使用鸿蒙系统吗?...
  5. HTTP响应状态码的含义
  6. SpringCloud2组件之Feign详解
  7. Xshell、Xftp版本情况
  8. ES全文检索详细教程
  9. riscv引导程序及仿真记录
  10. WebServlet注解