首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

面试有关问题请大家帮助

2012-01-09 
面试问题请大家帮助!1,2,3,4,5五个数打印出所有不同的排列求: 4 不能在第三位, 3 与 5 不能相连????

面试问题请大家帮助!
1,2,3,4,5五个数
打印出所有不同的排列
求: "4 "不能在第三位, "3 "与 "5 "不能相连????

[解决办法]
排列组合我都忘记是高中还是大学学的了.
[解决办法]
给出我的答案,我的办法不知道对不对,而且我觉得我这方法很笨,应该有更好的方法。
下面的代码我去掉了空格,可以格式化还原。

public class fun
{
static int x;
public static void fun()
{
for(int i=1;i <=5;i++)
{
for(int j=1;j <=5;j++)
{
if(j!=i)
{
for(int k=1;k <=5;k++)
{
if(k!=j && k!=i && k!=4)
{
for(int m=1;m <=5;m++)
{
if(m!=i && m!=j && m!=k)
{
for(int n=1;n <=5;n++)
{
if(n!=i && n!=j && n!=k && n!=m)
{
if((i*10+j)!=35 && (j*10+k)!=35 && (k*10+m)!=35 && (m*10+n)!=35)
{
if((i*10+j)!=53 && (j*10+k)!=53 && (k*10+m)!=53 && (m*10+n)!=53)
{
x=i*10000+j*1000+k*100+m*10+n;
System.out.println(x);
}}}}}}}}}}}}
public static void main(String[] args)
{
fun();

}
}

我的答案是
12345
12543
13245
13254
14325
14523
15234
15243
21345
21543
23145
23154
24315
24513
25134
25143
31245
31254
31524
31542
32145
32154
32514
32541
34125
34152
34215
34251
34512
34521
41325
41523
42315
42513
43125
43152
43215
43251
45123
45132
45213
45231
51234
51243
51324
51342
52134
52143
52314
52341
54123
54132
54213
54231
54312
54321
[解决办法]

public class NumberOutput {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
for(int i =12345;i <=54321;i++)
{
String iStr = i+ " ";
if(iStr.indexOf( "4 ")!=2&&iStr.indexOf( "35 ")==-1)
{
System.out.println(i);
}
}

}

}

[解决办法]
顶下楼上
[解决办法]

public class num {
static int x;
public static void main(String arg[]){
for(int i=1;i <6;i++)
for(int j=1;j <6;j++){
if(i==j)
continue;
for(int k=1;k <6&&k!=4;k++){
if(k==j||k==i)
continue;
for(int m=1;m <6;m++){
if(m==k||m==j||m==i)
continue;
for(int n=1;n <6;n++){
if(n==m||n==k||n==j||n==i)
continue;
if(i+j==8||j+k==8||k+m==8||m+n==8)
continue;
x=i*10000+j*1000+k*100+m*10+n;
System.out.println(x);
}
}
}
}
}
}
[解决办法]

public class Test2
{
public static void main(String[] args)
{
for(int i=1;i <=5;i++)
for(int j=1;j <=5;j++)
for(int k=1;k <=5;k++)


for(int y=1;y <=5;y++)
for(int t=1;t <=5;t++)
if((t!=y && t!=k && t!=j && t!=i)
&& (y!=k && y!=j && y!=i)
&& (k!=j && k!=i)
&& (i!=j)
)
{

System.out.println(i+ " "+j+k+y+t);
}
}
}
[解决办法]
3楼的解法对吗``~?
[解决办法]
关注
[解决办法]
递归算法题
[解决办法]
老怪物不是出了计算机程序设计艺术第四卷, 讲的就是排列与组合

如果楼主不满足于仅仅解决问题, 可以研究之...
[解决办法]
用数组来做应该会更简单一些
[解决办法]
学习
[解决办法]
学习中。。。
[解决办法]
学习
[解决办法]
csdn上面别人写的,现在是全排列,你需要什么条件在输出的时候控制下就可以了
import java.util.*;
public class PermutationAndCombination{
/**

* author:54powerman@163.com

* blog:http://blog.sina.com.cn/m/54powerman

**/
public static void main(String[] args){
long date1=System.currentTimeMillis();
List list=count( "123 ");//这个是排列,如果有重复的,要在输出的时候控制
for(int i=0;i < list.size();i++){
System.out.println(list.get(i));
}
System.out.println( "Process complete!Get "+list.size()+ " strings and take ");
System.out.print(System.currentTimeMillis()-date1+ " ms ");
}

public static List count(String strData){
List list = new ArrayList();
if(strData.length() <2){//不变化
List.add(strData);
return list;
}
else if(strData.length()==2){// 交换
String str1=strData.substring(0,1);
String str2=strData.substring(1);
list.add(strData);
list.add(str2+str1);
}
else{
for(int i=0;i < strData.length();i++){
String strTmp=strData.substring(i,i+1);//从第1位开始截取,只截1位
List listTmp=count(strData.substring(0,i)+strData.substring(i+1,strData.length()));
for(int j=0;j < listTmp.size();j++){
list.add(strTmp+listTmp.get(j).toString());
}
}
}
return list;
}
}
[解决办法]
mark
[解决办法]
先全排列在比较吧...
[解决办法]
学习```

热点排行