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
分享到:
相关推荐
输出:1 2 3 2 1 3 3 1 2 1 3 2 2 3 1 3 2 1算法 算法生成(n-1)!前n-1个元素的排列,与其中每个元素相邻的最后一个元素。这将生成以最后一个元素结尾的所有置换。 如果n为奇数,则交换第一个和最后一个元素...
本书旨在探讨如何优化算法效率,详细阐述了经典算法和特殊算法的实现、应用技巧和复杂度验证过程,内容由浅入深,能帮助读者快速掌握复杂度适当、正确率高的高效编程方法以及自检、自测技巧,是参加ACM ICPC、Google...
如久不拔号、久不应答、位间不拔号的延时,缺省值为10秒,可选择的时间值有10秒、30秒、1分钟。按一次该键则显示下一个时间值,三个值循环显示,当按下“确认”键时,就选定当前显示值供系统使用,按“复位”键则...
(组合不考虑顺序,即[1,2]和[2,1]属同一个组合) 本程序的思路(来自网上其他大神): (1)创建有n个元素数组,数组元素的值为1表示选中,为0则没选中。 (2)初始化,将数组前m个元素置1,表示第一个组合为前m个...
排列 代码如下:#include <stdio>// 主要是找到当前要排的 和后面要排数的关系int swap(int m,int n){ if(n==1) return m-n+1; return m*swap(m-1,n-1); }int main(){ int m=5,n=4; printf(“%d”,swap(5,4)); ...
然后把字符移到第二个位置,将第二个位置之后的数分别与第二个位置的数进行交换 1 b,a,c ===> 11 b,c,a 2 c,b,a ===> 21 c,a,b 3 a,b,c ===> 31 a,c,b **/ function zuhe($arr,$begin){ if(!is_array($arr)) return...
如果已知明细账目清单,能通过编程找到漏掉的是哪1笔或几笔吗? 如果有多种可能,则输出所有可能的情况。 我们规定:用户输入的第一行是:有错的总金额。 接下来是一个整数n,表示下面将要输入的明细账目的条数。 再...
1 2 3 1 3 2 2 1 3 2 3 1 3 1 2 3 2 1 思路: (dfs) O(n!) 使用DFS 进入递归循环的时候 将使用过的数字记录置为零 当从该函数递归出来的时候进行还原。 DFS递归的终止条件是已经选中n个数字 然后打印该数字组合,...
列出所有数字1到数字n的连续自然数的排列,要求所产生的任一数字序列中不允许出现得复数字。 Input 输入:n(1) Output 由1~n组成的所有不重复的数字序列,每行一个序列。 Sample Input 3 Sample Output 1 2 3 1 ...
4、 本实验应在学习了教材第3.3.4进行 [实验内容与步骤] 实验题目:下面是一个循环结构 的C程序。 main() { int i ,j; long sum=0; for(i=1,i,i++) for(j=1;j<=3;j++) sum=sum+(i+1)*(i+1)*(j+2) printf(“sum is ...
范例1-2 一维数组应用 3 1.1.3 一维数组的高级应用 5 范例1-3 一维数组的高级应用 5 1.1.4 显示杨辉三角 7 范例1-4 显示杨辉三角 7 ∷相关函数:c函数 8 1.1.5 魔方阵 9 范例1-5 魔方阵 9 1.1.6 三维数组的...
注意:管脚1、管脚4、管脚7是通过逻辑器件7414连接到CLK0、CLK1、CLK2, 所以测量用户输入脉冲时将使用下降沿计数 82C54的输出也是通过7414连接到最终的输出,所以最终J2上的计数器输出与82C54手册中的输出有一个...
第三行和第四行只需重复刚才的步骤,将第二个有序数组也输入即可。输入时候一定是有序输入的,即数组元素已经按照从小到大顺序排列。 【输出形式】程序将两个有序一维数组合并为一个有序数组并按照从小到大顺序输出...
在本例中,变量a与b对应位的组合代表了二进制数所有的 4 种组合模式:0-0,0-1,1-0 ,和1-1 。“|”运算符和“&”运算符分别对变量a与b各个对应位的运算得到了变量c和变量d的值。对变量e和f的赋值说明了“^”运算符...
第1章 数据结构. 1 1.1 数组和字符串 2 1.1.1 一维数组的倒置 2 范例1-1 一维数组的倒置 2 ∷相关函数:fun函数 1.1.2 一维数组应用 3 范例1-2 一维数组应用 3 1.1.3 一维数组的高级应用 5 范例1-3 一维数组...
之后收到反馈,CA组合分类不能只按照开头比较分类,不然一但数据多了会对查阅带来极大不便,应该按照每组CA组合中bandEUTRA-r10的值进行判断,比如1AA-2AA,1A-2AA和1AA-2A应该归在同一行 实现原理:首先我想的...
</script> </body> </html> JavaScript实验报告全文共5页,当前为第3页。JavaScript实验报告全文共5页,当前为第3页。 字符串的交叉合并练习 JavaScript实验报告全文共5页,当前为第3页。 JavaScript实验报告全文共...
范例1-2 一维数组应用 3 1.1.3 一维数组的高级应用 5 范例1-3 一维数组的高级应用 5 1.1.4 显示杨辉三角 7 范例1-4 显示杨辉三角 7 ∷相关函数:c函数 8 1.1.5 魔方阵 9 范例1-5 魔方阵 9 1.1.6 三维数组的...
第三章 变频器的安装及接线 12 3.1 变频器前盖与数字操作键盘的安装 12 3.1.1 变频器前盖的安装 12 3.1.2 数字操作键盘的安装 12 3.2 安装地点及空间的选择 13 3.3 安装地点及空间的选择 15 3.3.1 主回路输入...