全排列模板-数组 2013年 第四届 蓝桥杯【带分数】
全排列模板-字符数组 2014年 第五届 蓝桥杯【扑克排序】
全排列模板-无重复元素 2016年 第七届 蓝桥杯【凑算式】

全排列模板-数组

public class Main {public static void main(String[] args) {int arr1[] = {1, 2, 3, 4, 5, 6, 7, 8, 9};int arr2[] = {1, 2, 3};f(arr1, 0);}//确认某一个排列的第k位private static void f(int[] arr, int k) {if (k == arr.length) {  //全部确认/*for(int x: arr) {System.out.print(x);}System.out.println();*///函数功能区return;}for (int i = k; i < arr.length; i++) { //选定第k位//将第i位和第k位交换int t = arr[i];arr[i] = arr[k];arr[k] = t;// 移交下一层去确认k+1位f(arr, k + 1);//回溯(换回来)t = arr[i];arr[i] = arr[k];arr[k] = t;}}
}

全排列模板-字符数组

import java.util.HashSet;
import java.util.Set;public class Main {static Set<String> set = new HashSet<String>();public static void main(String[] args) {char[] a = {'A', 'A', '2', '2', '3', '3', '4', '4'};f(a, 0);for (String x : set) {  // 遍历set()System.out.println(x);}}private static void f(char[] a, int k) {if (k == a.length) {String s = new String(a);if (check(s)) {// System.out.println(s);set.add(s);}}for (int i = k; i < a.length; i++) {char t = a[k];a[k] = a[i];a[i] = t;f(a, k + 1);t = a[k];a[k] = a[i];a[i] = t;}}private static boolean check(String s) {if (***)return true;return false;}
}

全排列模板-无重复元素

public class Main {static int a[] = {};static int ans;static boolean check() {if (***)return true;return false;}//递归回溯生成全排列,适用于无重复元素的情况 考虑第k位,前面已经排定static void f(int k) {if (k == 数组的元素个数) { // 一种排列已经生成if (check())ans++;}// 从k往后的每个数字都可以放在k位for (int i = k; i < 数组的元素个数; ++i) {{int t = a[i];a[i] = a[k];a[k] = t;}f(k + 1); // 递归{int t = a[i];a[i] = a[k];a[k] = t;} // 回溯}}public static void main(String[] args) {f(0);System.out.println(ans);}
}

【带分数】题目详情

标题:带分数

100 可以表示为带分数的形式:100 = 3 + 69258 / 714还可以表示为:100 = 82 + 3546 / 197注意特征:带分数中,数字1~9分别出现且只出现一次(不包含0)。类似这样的带分数,100 有 11 种表示法。

题目要求: 从标准输入读入一个正整数N (N<1000*1000) 程序输出该数字用数码1~9不重复不遗漏地组成带分数表示的全部种数。
注意:不要求输出每个表示,只统计有多少表示法!

例如: 用户输入: 100 程序输出: 11

再例如: 用户输入: 105 程序输出: 6

资源约定: 峰值内存消耗(含虚拟机) < 64M CPU消耗 < 3000ms

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

所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。 注意:不要使用package语句。不要使用jdk1.6及以上版本的特性。
注意:主类的名字必须是:Main,否则按无效代码处理。

【带分数】题目解答

import java.util.Scanner;
//1-9 分別出现一次, 求带分数表示种数public class Main {static int ans;  //全局变量private static int N;public static void main(String[] args) {Scanner sc = new Scanner(System.in);N = sc.nextInt();int[] arr = {1, 2, 3, 4, 5, 6, 7, 8, 9};// int[] arr = {1, 2, 3};f(arr, 0);  //全排列函数System.out.println(ans);}//确认某一个排列的第k位private static void f(int[] arr, int k) {if (k == 9) {  //全部确认check(arr);// print(arr);return;}//选定第k位,for (int i = k; i < arr.length; i++) {//将第i位和第k位交换int t = arr[i];arr[i] = arr[k];arr[k] = t;f(arr, k + 1); // 移交下一层 确认第k+1位//回溯(换回来) 不影响以后的取值//每一次计算, 都用初始值t = arr[i];arr[i] = arr[k];arr[k] = t;}}// private static void print(int[] arr) {//      for (int i = 0; i < arr.length; i++) {//          System.out.print(arr[i]);
//      }
//      System.out.println();
//  }//枚举加号和除号的位置private static void check(int[] arr) {//+前的字符数最多是7for (int i = 1; i <= 7; i++) {int num1 = toInt(arr, 0, i);  //+前面的一段整数if (num1 >= N) continue;  //如果此时+号前的数值已经超过了N,没必要验算了//  /前面的字符数for (int j = 1; j <= 8 - i; j++) {int num2 = toInt(arr, i, j);int num3 = toInt(arr, i + j, 9 - i - j);if (num2 % num3 == 0 && num1 + num2 / num3 == N) {ans++;}}}}//pos: 开始计算的位置;   len:计算的长度(计算len次)   计算区间: [pos, pos + len -1]private static int toInt(int[] arr, int pos, int len) {int t = 1;int ans = 0;for (int i = pos + len - 1; i >= pos; i--) {ans += arr[i] * t;t *= 10;}return ans;}}
/**
int num1 = toInt(arr, 0, i);  // "+"前面的一段整数
int num2 = toInt(arr, i, j);  // "+"与"/"之间的整数
int num3 = toInt(arr, i + j, 9 - i - j);  // "/"后面的整数100 = 3 + 69258 / 714
int num1 = toInt(arr, 0, 1);
int num2 = toInt(arr, 1, 5);
int num3 = toInt(arr, 1 + 5, 9 - 1 - 5);100 = 82 + 3546 / 197
int num1 = toInt(arr, 0, 2);
int num2 = toInt(arr, 2, 4);
int num3 = toInt(arr, 2 + 4, 9 - 2 - 4);*/

【扑克排序】题目详情

标题:扑克序列

A A 2 2 3 3 4 4, 一共4对扑克牌。请你把它们排成一行。
要求:两个A中间有1张牌,两个2之间有2张牌,两个3之间有3张牌,两个4之间有4张牌。

请填写出所有符合要求的排列中,字典序最小的那个。

例如:22AA3344 比 A2A23344 字典序小。当然,它们都不是满足要求的答案。

请通过浏览器提交答案。“A”一定不要用小写字母a,也不要用“1”代替。字符间一定不要留空格。
答案:2342A3A4

【扑克排序】题目解答

import java.util.HashSet;
import java.util.Set;public class Main {static Set<String> set = new HashSet<String>();public static void main(String[] args) {char[] a = {'A', 'A', '2', '2', '3', '3', '4', '4'};f(a, 0);for (String x : set) {  // 遍历set()System.out.println(x);}}private static void f(char[] a, int k) {if (k == a.length) {String s = new String(a);if (check(s)) {// System.out.println(s);set.add(s);}}for (int i = k; i < a.length; i++) {char t = a[k];a[k] = a[i];a[i] = t;f(a, k + 1);t = a[k];a[k] = a[i];a[i] = t;}}private static boolean check(String s) {if (s.lastIndexOf('A') - s.indexOf('A') == 2 && s.lastIndexOf('2') - s.indexOf('2') == 3 && s.lastIndexOf('3') - s.indexOf('3') == 4 && s.lastIndexOf('4') - s.indexOf('4') == 5)return true;return false;}
}

【凑算式】题目详情

凑算式

 B      DEF A + --- + ------- = 10C      GHI(如果显示有问题,可以参见【图1.jpg】)这个算式中A~I代表1~9的数字,不同的字母代表不同的数字。

比如: 6+8/3+952/714 就是一种解法, 5+3/1+972/486 是另一种解法。

这个算式一共有多少种解法?

注意:你提交应该是个整数,不要填写任何多余的内容或说明性文字。
答案:29

【凑算式】题目解答

public class Main { // 29static int a[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };static int ans;static boolean check() {int x = a[3] * 100 + a[4] * 10 + a[5];int y = a[6] * 100 + a[7] * 10 + a[8];if ((a[1] * y + a[2] * x) % (y * a[2]) == 0 && a[0] + (a[1] * y + a[2] * x) / (y * a[2]) == 10)return true;return false;}//递归回溯生成全排列,适用于无重复元素的情况 考虑第k位,前面已经排定static void f(int k) {if (k == 9) { // 一种排列已经生成if (check())ans++;}// 从k往后的每个数字都可以放在k位for (int i = k; i < 9; ++i) {{int t = a[i];a[i] = a[k];a[k] = t;}f(k + 1); // 递归{int t = a[i];a[i] = a[k];a[k] = t;} // 回溯}}public static void main(String[] args) {f(0);System.out.println(ans);}
}

全排列 模板

package Z;public class 全排列 {public static void main(String[] args) {int a[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };perm(a, 0, a.length);}public static void perm(int arr[], int start, int end) {if (start == end) {for (int temp : arr) {System.out.print(temp);}System.out.println();} else {for (int i = start; i < arr.length; i++) {swap(arr, start, i);perm(arr, start + 1, end);swap(arr, start, i);}}}public static void swap(int arr[], int i, int j) {int temp = arr[i];arr[i] = arr[j];arr[j] = temp;}}


Java【全排列 算法 模板】相关推荐

  1. java全排列算法 递归算法_Java递归实现全排列

    最近整理之前自己学习Java时的一些代码笔记,可能都是一些比较基础的Java知识,在这里只是给需要的人参考一下. 递归算法:将数据分为两部分,递归将数据从左侧移右侧实现全排列 package inte ...

  2. Java 全排列算法

    优化前:public static void main(String[] args) {Integer l[] = {1,5,2};sort(l,0); }public static void sor ...

  3. 全排列的java算法_全排列算法原理和实现

    评论 # re: 全排列算法原理和实现  回复  更多评论 #include #include #define CHESSNUM 9 using namespace std; /*********** ...

  4. 【蓝桥杯算法模板题--蓝桥题库Java】

    PDF下载地址:点击即可 文章目录 ==算法模板== 1 排序(ArrayList,sort) 题目描述 输入描述 输出描述 输入输出样例 示例 1 运行限制 2 小明的彩灯(差分) 输入输出样例 示 ...

  5. 蓝桥杯——Java中的全排列算法

    蓝桥杯--Java中的全排列 全排列的概念 排列 从n个数中选取m(m<=n)个数按照一定的顺序进行排成一个列,叫作从n个元素中取m个元素的一个排列.不同的顺序是一个不同的排列.从n个元素中取m ...

  6. Java刷算法:收藏大法

    Java刷算法怎么刷:持续更新中 算法技巧 算法一轮复习 Java API复习 输入与输出 java.io.* java.util.* 数组 **判断二维数组是否为空** **数组拷贝** **字符数 ...

  7. java 全排列非递归算法_全排列的非递归算法 - osc_ivkc73ze的个人空间 - OSCHINA - 中文开源技术交流社区...

    1.全排列的定义和公式: 从n个数中选取m(m<=n)个数按照一定的顺序进行排成一个列,叫作从n个元素中取m个元素的一个排列.由排列的定义,显然不同的顺序是一个不同的排列.从n个元素中取m个元素 ...

  8. java抽象类和模板模式_测试抽象类和模板方法模式

    java抽象类和模板模式 摘自Wikipedia,"模板方法定义了算法的程序框架. 子类可以覆盖一个或多个算法步骤,以允许不同的行为,同时确保仍然遵循总体算法." 通常,此模式由两 ...

  9. 详讲全排列算法,及解决数字搭积木问题

    如果你是做这道题不会,那么你可以看这道题的解题思路,如果你是不太理解全排列算法,那么你可以通过这个题来理解. 题目描述: 小明最近喜欢搭数字积木.一共有10块积木,每个积木上有一个数字,0~9. 搭积 ...

最新文章

  1. torch.backends.cudnn.deterministic 使用cuda保证每次结果一样
  2. 【转】android错误 aapt.exe已停止工作的解决方法
  3. 我们的解决方案:日志系统
  4. android调试是出现:Re-installation failed due to different application signatures
  5. 4.RabbitMQ 4种交换模式
  6. 【Python】Matplotlib切割图片
  7. 5个让IT开发效率提高200%的工具,最后一个很实用,你用过几个
  8. RedHat 救援模式下排错
  9. 为什么Zappos花钱让新员工走人?
  10. 【手指识别】基于matlab GUI指尖图像采集与检测【含Matlab源码 585期】
  11. git 查看修改明细_Git(查看修改记录)
  12. Android系统生成jks签名
  13. dll注册,但是对DllRegisterServer的调用失败,错误代码0x80070716
  14. 统计学中p值计算公式_统计学 z值 p值 问题 计算问题 在线急等
  15. 文献阅读笔记怎么写?
  16. unity使用easy ar制作ar红包
  17. Android工程中方法数超过65536解决方法
  18. adobe清理工具_Adobe终于通过其新的渐变工具实现了这一点-UX评论
  19. ASP.NET Web Service定时执行任务
  20. 函数原型中int *arr和int arr[]

热门文章

  1. mysql 查询帖子 用户_我要用sql查询出来,我所发布的帖子和我关注的用户发布的帖子,这个sql该怎么写啊?...
  2. 外部中断器1C语言程序,单片机C语言代码:外部中断,按下中断按键LED不亮,LED1正常亮...
  3. python输入水果求个数问题_水果爱好者:用Python解决一个简单的分类问题
  4. oracle中姓名取姓氏,Oracle SQL - 解析一個名稱字符串並將其轉換爲第一個姓氏和名字...
  5. html 定义函数调用函数,请问HTML function函数怎么定义和调用?
  6. 期末考试前的预习,科目:化工设备与反应器(4)
  7. 十九、 彻底掌握金融量化交易库Talib
  8. django view
  9. 决策树和随机森林(上)
  10. 最终篇!AAAI 2022值得读的NLP论文盘点