package com.hello;
import java.util.HashSet;
import java.util.Set;
/*
* @author 张春蕾
* 输出1,2,2,3,4,5的所有排列组合,4不能在第三位,3和5不能相邻
* 本题目的解决时我自己的思路,不知道最总结果是否正确,若不正确请谅解
* 不使用循环递归,忘了是哪个公司的笔试题了
*/
public class HelloJava{
public static void main(String[] args){
int[] a = {1,2,2,3,4,5};
Set<String> set = getSet(a);
for(String s: set){//循环遍历取出每个字符串进行判断
if(s.indexOf('4') != 2){//4不能在第三位
if(s.indexOf("35")==-1 && s.indexOf("53")==-1){//3和5不能相邻
System.out.println(s);
}
}
}
}
private static Set<String> getSet(int[] a) {
Set<String> set = new HashSet<String>();
String s = null;
for(int i=0;i<a.length;i++){//循环遍历一次,取出每一个数做第一个数
for(int j=0;j<a.length;j++){//在取下一个数做第二个数
s = getSortString(a,i,j);
set.add(s);//使用set容器可以自动对重复的数据进行过滤
}
}
return set;
}
public static String getSortString(int[]a,int i,int j){
String strFinal = "";
if(i == j){//判断是否相等,若想等,则直接输出
for(int k=0;k<a.length;k++){
strFinal = strFinal + a[k];
}
}else{//若不想等,则进行交换
int[] n = a;
n[i]=n[i]^n[j];
n[j]=n[i]^n[j];
n[i]=n[i]^n[j];
for(int k=0;k<a.length;k++){
strFinal = strFinal +a[k];
}
}
return strFinal;//返回最终字符串
}
}
输出结果为:
345122
122345
125234
145223
451322
451232
512423
245123
312245
212345
345212
152234
512234
341252
541223
513422
分享到:
相关推荐
易语言是一种专为初学者设计的编程语言,它采用了贴近自然语言的...通过对这段源码的分析和实践,你不仅可以了解易语言的编程特性,还能深入理解排列组合的基本原理,这对于今后解决更复杂的编程问题具有重要的意义。
总的来说,理解和掌握排列组合及递归的使用是编程能力的重要组成部分,它们在解决问题时能提供强大的工具。通过`TestCase_test`中的测试用例,你可以进一步巩固这方面的知识,并提高自己的编程技巧。
在编程领域,排列和组合是两个重要的概念,它们在解决许多问题时都会被用到,尤其是在算法设计中。本文将详细探讨如何使用C语言来实现排列组合算法,并结合递归解决P(m,n)问题。 首先,我们要理解排列和组合的基本...
排列组合生成算法是计算机科学中一个重要的概念,特别是在解决优化问题和数据分析时有着广泛应用。在C++编程语言中实现这样的算法,可以帮助我们有效地处理大量数据的排列和组合问题。下面将详细探讨排列组合生成...
在数学和计算科学中,排列组合是指从一个集合中选择一些元素,并且这些元素的顺序是重要的。换言之,排列组合是指从一个集合中选择一些元素,并且考虑这些元素的顺序。 二、回溯算法的应用 回溯算法是一种常用的...
在这个“基于C语言的排列组合算法”中,我们将深入探讨这两个概念以及如何使用C语言来实现它们。 排列是有限集合中的元素的一种有顺序的排列方式。在C语言中,我们可以使用递归方法来实现排列算法。首先,我们需要...
则第 1 个数字有 5 种选择,第 2 个数字有 4 种选择,第 3 个数字有 3 种选择,第 4 个数字有 2 种选择,最终可选择的个数为 5*4*3*2=120,和前面相比较,即为 5 的阶乘除以 1 的阶乘。 如果不是选择 4 个数字,...
在IT面试和笔试中,排列和组合是常考的算法问题,主要考察候选人的逻辑思维和编程能力。这里我们将详细探讨排列和组合的代码实现,包括全排列和组合的多种方法。 **全排列**是将一组给定的元素按照所有可能的顺序...
对于本题中的“输出自然数1到n的所有不重复的排列”,回溯法非常适合,因为它能够有效地生成所有可能的排列组合而不产生重复。 ### 问题描述与分析 题目要求输出自然数1到n的所有不重复排列,即n的全排列。具体来...
根据给定的文件信息,我们可以总结出以下关于C++中排列组合算法的知识点: ### C++中的排列组合算法实现 #### 1. 排列算法(Permutation) 在C++中,排列算法通常用于生成一组元素的所有可能顺序。在给定的代码中...
2. **数组**:数组在VB中用于存储一组数据,例如,在排列组合中,我们可以用数组来保存每次选择的对象。 3. **选择函数**:为了从一组对象中选择特定数量的对象,可以编写自定义函数,如“Combination”和...
在编程领域,数组排列组合问题是一个经典的问题,它涉及到算法设计和数据结构的理解。这个问题的主要目标是从给定的n个数组中找出所有的可能排列组合。Java作为一种强大的编程语言,提供了丰富的工具和方法来解决...
在计算机科学和编程领域,排列组合是解决许多问题的基础,特别是在算法设计中。"排列组合迭代"是指通过循环和递归等控制结构来系统地生成所有可能的排列或组合。这种技术广泛应用于数据结构和算法设计,如搜索、优化...
每组排列都按顺序打印,如“第1组:1,2,3,4”等。 总结来说,本示例通过回溯法实现了全排列问题的求解,展示了如何利用编程来生成一个整数序列的所有可能排列,这对于理解和应用回溯法解决其他类似的组合问题具有...
设有 3 种不同的钱币(1 分、2 分、5 分)各若干张,可用这 3 种钱币产生许多不同的面值。如给定面值 7 分,能组成给定面值 7 分的方法有如下 4 种: 1. 3 个 1 分 + 2 个 2 分; 2. 1 个 1 分 + 3 个 2 分; 3. 2 ...
排列组合是组合数学中的基本概念,它在计算机科学和算法设计中有着广泛的应用,尤其是在解决优化问题、数据处理和概率计算等领域。排列是指从n个不同元素中取出m(m≤n)个元素,按照一定的顺序排成一列,而组合则是...
2. **递归函数`perm`**:此函数接受三个参数: - `list[]`:当前排列的中间结果数组。 - `k`:当前处理到的元素位置。 - `m`:总元素数量减一。 3. **判断终止条件**:当`k`等于`m`时,说明已经完成了一个完整...
数组排列组合是算法设计中的一个重要主题,尤其在解决复杂问题时,如搜索、优化和数学问题。本程序"quanpailie.rar_数组排列组合"的目标是实现一个全排列算法,它能生成给定数字串的所有可能排列。 全排列是指从n个...
总之,排列组合的输出实现涉及到递归、迭代和位操作等编程技巧。理解这些算法可以帮助我们更有效地解决实际问题,例如在搜索、优化或统计分析等场景。在实践中,还需要注意优化算法以提高效率,特别是处理大数据集时...
例如,假设我们有5个数`{1, 2, 3, 4, 5}`,初始状态是未排列的,递归函数会尝试各种可能性,如`[1, 2, 3, 4] + [5]`,然后是`[1, 2, 3, 5] + [4]`等,直到所有可能的排列都被生成并输出。 在实际代码中,我们还需要...