用1、2、2、3、4、5这六个数字,用java写一个程序,打印出所有不同的排列,如:512234、412345等,要求:"4"不能在第三位,"3"与"5"不能相连
这道笔试题相当的出名,我也有幸遇到了。确切的说这是一道算法题,像我这种离散,数据结构都半吊子的人实在拿它没撤,回来小发愤了一下,找到了多个不同的实现算法
第一个:
-
packagecom.audition;
-
-
publicclassPermutationAlgo{
-
privateintcount=0;
-
-
publicvoidcalculate(){
-
StringeleStr="122345";
-
depthSearch(eleStr,"");
-
System.out.println("符合条件的总结果数为:"+count+"条");
-
}
-
-
-
-
-
-
publicvoiddepthSearch(StringeleStr,StringrstStr){
-
if(eleStr.length()==0){
-
count++;
-
System.out.println(rstStr);
-
return;
-
}
-
for(inti=0;i<eleStr.length();i++){
-
StringcurrEle=eleStr.substring(i,i+1);
-
if(rstStr.length()==2&&"4".equals(currEle))continue;
-
if(rstStr.endsWith("3")&&"5".equals(currEle))continue;
-
if(rstStr.endsWith("5")&&"3".equals(currEle))continue;
-
if(eleStr.substring(0,i).indexOf(currEle)!=-1)continue;
-
depthSearch(eleStr.substring(0,i)+eleStr.substring(i+1),rstStr+currEle);
-
}
-
}
-
-
publicstaticvoidmain(String[]args){
-
newPermutationAlgo().calculate();
-
}
-
}
第二个
-
packagecom.audition;
-
-
publicclassPermutationAlgo2{
-
privatestaticintcount=0;
-
publicstaticvoidmain(String[]args){
-
-
-
int[]arr={1,3,4,5};
-
printCom(arr,0);
-
System.out.printf("符合要求的排列共有%d种",count);
-
}
-
-
publicstaticvoidprintCom(int[]arr,intindex){
-
if(index==arr.length-1){
-
insertTwo(arr,0);
-
return;
-
}
-
printCom(arr,index+1);
-
for(inti=index+1;i<arr.length;i++){
-
arr[index]^=arr[i];
-
arr[i]^=arr[index];
-
arr[index]^=arr[i];
-
printCom(arr,index+1);
-
arr[index]^=arr[i];
-
arr[i]^=arr[index];
-
arr[index]^=arr[i];
-
}
-
}
-
-
-
privatestaticvoidinsertTwo(int[]arr,intindex){
-
if(index==arr.length+1)
-
return;
-
for(inti=index+1;i<arr.length+2;i++){
-
int[]tar=newint[arr.length+2];
-
tar[i]=2;
-
tar[index]=2;
-
innerInsert(arr,tar);
-
}
-
insertTwo(arr,index+1);
-
}
-
-
privatestaticvoidinnerInsert(int[]arr,int[]tar){
-
intindex=0;
-
intindexArr=0;
-
while(index<tar.length){
-
if(tar[index]==0){
-
if((index>0&&tar[index-1]+arr[indexArr]==8)
-
||(index==2&&arr[indexArr]==4))
-
return;
-
tar[index]=arr[indexArr++];
-
}
-
index++;
-
}
-
count++;
-
System.out.printf("[%d]",count);
-
for(inti=0;i<tar.length;i++){
-
System.out.print(tar[i]+"");
-
}
-
if(count%5==0){
-
System.out.println();
-
}
-
}
-
-
}
第三个
-
packagecom.audition;
-
-
-
-
-
-
-
-
-
-
publicclassPermutationAlgo3{
-
privateint[]numbers=newint[]{1,2,2,3,4,5};
-
publicintn;
-
privateStringlastResult="";
-
-
privatebooleanvalidate(Strings){
-
if(s.compareTo(lastResult)<=0)
-
returnfalse;
-
if(s.charAt(2)=='4')
-
returnfalse;
-
if(s.indexOf("35")>=0||s.indexOf("53")>=0)
-
returnfalse;
-
returntrue;
-
}
-
-
publicvoidlist(Stringindex,Stringresult){
-
for(inti=0;i<numbers.length;i++){
-
if(index.indexOf(i+48)<0){
-
Strings=result+String.valueOf(numbers[i]);
-
if(s.length()==numbers.length){
-
if(validate(s)){
-
System.out.println(s);
-
lastResult=s;
-
n++;
-
}
-
break;
-
}
-
list(index+String.valueOf(i),s);
-
}
-
}
-
}
-
-
-
publicstaticvoidmain(String[]args){
-
PermutationAlgo3algo3=newPermutationAlgo3();
-
algo3.list("","");
-
System.out.println("总数:"+algo3.n);
-
}
-
}
用1、2、2、3、4、5这六个数字,用java写一个程序,打印出所有不同的排列,如:512234、412345等,要求:"4"不能在第三位,"3"与"5"不能相连
这道笔试题相当的出名,我也有幸遇到了。确切的说这是一道算法题,像我这种离散,数据结构都半吊子的人实在拿它没撤,回来小发愤了一下,找到了多个不同的实现算法
第一个:
-
packagecom.audition;
-
-
publicclassPermutationAlgo{
-
privateintcount=0;
-
-
publicvoidcalculate(){
-
StringeleStr="122345";
-
depthSearch(eleStr,"");
-
System.out.println("符合条件的总结果数为:"+count+"条");
-
}
-
-
-
-
-
-
publicvoiddepthSearch(StringeleStr,StringrstStr){
-
if(eleStr.length()==0){
-
count++;
-
System.out.println(rstStr);
-
return;
-
}
-
for(inti=0;i<eleStr.length();i++){
-
StringcurrEle=eleStr.substring(i,i+1);
-
if(rstStr.length()==2&&"4".equals(currEle))continue;
-
if(rstStr.endsWith("3")&&"5".equals(currEle))continue;
-
if(rstStr.endsWith("5")&&"3".equals(currEle))continue;
-
if(eleStr.substring(0,i).indexOf(currEle)!=-1)continue;
-
depthSearch(eleStr.substring(0,i)+eleStr.substring(i+1),rstStr+currEle);
-
}
-
}
-
-
publicstaticvoidmain(String[]args){
-
newPermutationAlgo().calculate();
-
}
-
}
第二个
-
packagecom.audition;
-
-
publicclassPermutationAlgo2{
-
privatestaticintcount=0;
-
publicstaticvoidmain(String[]args){
-
-
-
int[]arr={1,3,4,5};
-
printCom(arr,0);
-
System.out.printf("符合要求的排列共有%d种",count);
-
}
-
-
publicstaticvoidprintCom(int[]arr,intindex){
-
if(index==arr.length-1){
-
insertTwo(arr,0);
-
return;
-
}
-
printCom(arr,index+1);
-
for(inti=index+1;i<arr.length;i++){
-
arr[index]^=arr[i];
-
arr[i]^=arr[index];
-
arr[index]^=arr[i];
-
printCom(arr,index+1);
-
arr[index]^=arr[i];
-
arr[i]^=arr[index];
-
arr[index]^=arr[i];
-
}
-
}
-
-
-
privatestaticvoidinsertTwo(int[]arr,intindex){
-
if(index==arr.length+1)
-
return;
-
for(inti=index+1;i<arr.length+2;i++){
-
int[]tar=newint[arr.length+2];
-
tar[i]=2;
-
tar[index]=2;
-
innerInsert(arr,tar);
-
}
-
insertTwo(arr,index+1);
-
}
-
-
privatestaticvoidinnerInsert(int[]arr,int[]tar){
-
intindex=0;
-
intindexArr=0;
-
while(index<tar.length){
-
if(tar[index]==0){
-
if((index>0&&tar[index-1]+arr[indexArr]==8)
-
||(index==2&&arr[indexArr]==4))
-
return;
-
tar[index]=arr[indexArr++];
-
}
-
index++;
-
}
-
count++;
-
System.out.printf("[%d]",count);
-
for(inti=0;i<tar.length;i++){
-
System.out.print(tar[i]+"");
-
}
-
if(count%5==0){
-
System.out.println();
-
}
-
}
-
-
}
第三个
-
packagecom.audition;
-
-
-
-
-
-
-
-
-
-
publicclassPermutationAlgo3{
-
privateint[]numbers=newint[]{1,2,2,3,4,5};
-
publicintn;
-
privateStringlastResult="";
-
-
privatebooleanvalidate(Strings){
-
if(s.compareTo(lastResult)<=0)
-
returnfalse;
-
if(s.charAt(2)=='4')
-
returnfalse;
-
if(s.indexOf("35")>=0||s.indexOf("53")>=0)
-
returnfalse;
-
returntrue;
-
}
-
-
publicvoidlist(Stringindex,Stringresult){
-
for(inti=0;i<numbers.length;i++){
-
if(index.indexOf(i+48)<0){
-
Strings=result+String.valueOf(numbers[i]);
-
if(s.length()==numbers.length){
-
if(validate(s)){
-
System.out.println(s);
-
lastResult=s;
-
n++;
-
}
-
break;
-
}
-
list(index+String.valueOf(i),s);
-
}
-
}
-
}
-
-
-
publicstaticvoidmain(String[]args){
-
PermutationAlgo3algo3=newPermutationAlgo3();
-
algo3.list("","");
-
System.out.println("总数:"+algo3.n);
-
}
-
}
分享到:
相关推荐
用户从键盘输入一个1-9999之间的数,程序将判断这个数是几位数,并判断这个数是否回文数。回文数是指将数含有的数字逆序排列后得到的数和原数相同,例如12121,4224,6778776等都是回文数。 1)程序具有判断用户的输入...
2个目标文件,FTP的目标是:(1)提高文件的共享性(计算机程序和/或数据),(2)鼓励间接地(通过程序)使用远程计算机,(3)保护用户因主机之间的文件存储系统导致的变化,(4)为了可靠和高效地传输,虽然用户...
【程序29】:用1、2、2、3、4、5这六个数字,用java写一个main函数,打印出所有不同的排列,如:512234、412345等,要求:"4"不能在第三位,"3"与"5"不能相连。 【程序30】写一个方法,用二分查找法判断任意整数在...
2个目标文件,FTP的目标是:(1)提高文件的共享性(计算机程序和/或数据),(2)鼓励间接地(通过程序)使用远程计算机,(3)保护用户因主机之间的文件存储系统导致的变化,(4)为了可靠和高效地传输,虽然用户...
2个目标文件,FTP的目标是:(1)提高文件的共享性(计算机程序和/或数据),(2)鼓励间接地(通过程序)使用远程计算机,(3)保护用户因主机之间的文件存储系统导致的变化,(4)为了可靠和高效地传输,虽然用户...
凯撒加密解密程序 1个目标文件 1、程序结构化,用函数分别实现 2、对文件的加密,解密输出到文件 利用随机函数抽取幸运数字 简单 EJB的真实世界模型(源代码) 15个目标文件 摘要:Java源码,初学实例,基于EJB的真实...
2个目标文件,FTP的目标是:(1)提高文件的共享性(计算机程序和/或数据),(2)鼓励间接地(通过程序)使用远程计算机,(3)保护用户因主机之间的文件存储系统导致的变化,(4)为了可靠和高效地传输,虽然用户...
凯撒加密解密程序 1个目标文件 1、程序结构化,用函数分别实现 2、对文件的加密,解密输出到文件 利用随机函数抽取幸运数字 简单 EJB的真实世界模型(源代码) 15个目标文件 摘要:Java源码,初学实例,基于EJB的真实...
2个目标文件,FTP的目标是:(1)提高文件的共享性(计算机程序和/或数据),(2)鼓励间接地(通过程序)使用远程计算机,(3)保护用户因主机之间的文件存储系统导致的变化,(4)为了可靠和高效地传输,虽然用户...
题目:打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个"水仙花数",因为153=1的三次方+5的三次方+3的三次方。 1.程序分析:利用for循环控制100-999个数,...
2个目标文件,FTP的目标是:(1)提高文件的共享性(计算机程序和/或数据),(2)鼓励间接地(通过程序)使用远程计算机,(3)保护用户因主机之间的文件存储系统导致的变化,(4)为了可靠和高效地传输,虽然用户...
题目:打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身。例如: 153是一个"水仙花数",因为153=1的三次方+5的三次方+3的三次方。 1.程序分析:利用for循环控制100-999个...
84.9. 题目1:用1、2、2、3、4、5这六个数字,用java写一个main函数,打印出所有不同的排列,如:512234、412345等,要求:"4"不能在第三位,"3"与"5"不能相连. 117 84.10. 写一个方法,实现字符串的反转,如:输入...
杨教授工作室,版权所有,盗版必究, 3/29 页 3 2、在工程项目创建的对话框中输入项目名称 JavaDemo,并选择项目存放的目录路径 3、点击对话框中的完成(Finish)按钮,将创建出一个空的 Java 应用程序项目 杨教授...
这里边包括:第1章 Java图形用户界面编程 1 实例1 布局管理 2 实例2 设计软件启动界面 9 实例3 实现多色窗口 11 实例4 切分窗口 13 实例5 丰富多彩的按钮 15 实例6 在窗口中显示背景图 16 实例...
4、有五个学生,每个学生有3门课(语文、数学、英语)的成绩,写一个程序接收从键盘输入学生的信息,输入格式为:name,30,30,30(姓名,三门课成绩),然后把输入的学生信息按总分从高到低的顺序写入到一个名称"stu....
静态编译后的易语言EXE/DLL之间不能再共享譬如窗口、窗口组件等类似资源,对于已经静态连接到一个EXE/DLL中的支持库,该支持库中的数据或资源将不能再被其它EXE/DLL中所使用的同名支持库访问。这是因为代码被分别...
INT:中间代码,当一个源程序经过语法检查后编译产生一个可执行代码 IOF:Findit文档 IQY:Microsoft Internet查询文件 ISO:根据ISD 9660有关CD-ROM文件系统标准列出CD-ROM上的文件 ISP:X-Internet签字文件 ...
------------------------/组函数(共5个):将多个条件组合到一起最后只产生一个数据------min() max() avg() sum() count()----------------------------/ 51、select count(*) from emp; --求出表中一共有多少条...