请问有那位高手可以帮我一下,用java写一个小程序 给写六个数(1,2,2,3,4,5),要求用JAVA写一个小程序,对这些数字进行排列.条件是1和5不能相邻,3不能在第四位.(请各位帮个忙,小弟初) 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 解决思路:强化题目,用1、2、2、3、4、5这六个数字排列“递增”序列。其他要求不变。 算法思路:显然是递归,初始序列122345,先从末两位(45)变化(45,54),然后末三位(345) ... 直到最后六位.怎样解决重复问题?很简单,由于是递增序列,每生成新序列可与前一生成序列比较,如<放弃当前序列。当然有更好效率,如预先预测。代码如下: class test { // 当前固定部分 private String CurFixPart; private String PreGenNum; public static void main(String[] args) { test t=new test(); t.GenControll("122345"); } // 调整字符串s位置pos字符到最前 private String shift(String s, int pos) { String newStr; if (s.length()>pos+1) newStr=s.substring(pos, pos+1) +s.substring(0, pos) +s.substring(pos+1); else newStr=s.substring(pos) +s.substring(0, pos); return newStr; } protected int Validate(String newNum) { String newGenNum=CurFixPart+newNum; if (Integer.valueOf(newGenNum)<=Integer.valueOf(PreGenNum)) return 0; if (newGenNum.substring(2,3).equals("4") || (newGenNum.indexOf("35")!=-1) || (newGenNum.indexOf("53")!=-1)) return 0; PreGenNum=newGenNum; System.out.println(newGenNum); return 0; } public void GenControll(String Base) { PreGenNum="0"; CurFixPart=""; GenNext(Base, 0); } void GenNext(String varPart, int curPos) { if (varPart.length()==2) { Validate(varPart); Validate(shift(varPart, 1)); return; } // Next Layer String newGen=shift(varPart, curPos); String SavedFixPart=CurFixPart; CurFixPart=CurFixPart+newGen.substring(0,1); GenNext(newGen.substring(1), 0); CurFixPart=SavedFixPart; // 同层递增 if (curPos==varPart.length()-1) return; GenNext(varPart, curPos+1); } } 序列122345测试通过。 有什么意见请大家多多提点。 有API干啥不用呢?import java.util.Arrays;public class a{ public static void main(String[] args) { int[] arr = {4,2,1,3,2,5}; Arrays.sort(arr); String str = Arrays.toString(arr); str = str.replaceAll("[,\\[\\]]",""); System.out.println(new StringBuffer(str).reverse()); }} 关于JTree的疑问 两个字符串 与操作 关于Font和String的问题。 请问怎么用正则表达式的非捕获? 怎么判断一个resultset里面有没有记录? 用java写聊天室服务程序碰到的一些问题 各位用过JMF的老兄,当播放网络上的视频文件时,会在临时文件夹中拼命的生成文件,怎么办? 奇怪的问题! interface里面只能定义public成员,为什么clone为protected类型啊 发现了一个BUG : ImageIO JAVA中如何从文本文件中搜索数据!!!急呀!!! 大家好,关于使用java写sqlserver连接池问题
算法思路:显然是递归,初始序列122345,先从末两位(45)变化(45,54),然后末三位(345) ... 直到最后六位.怎样解决重复问题?很简单,由于是递增序列,每生成新序列可与前一生成序列比较,如<放弃当前序列。当然有更好效率,如预先预测。代码如下:
class test
{
// 当前固定部分
private String CurFixPart;
private String PreGenNum; public static void main(String[] args)
{
test t=new test();
t.GenControll("122345");
} // 调整字符串s位置pos字符到最前
private String shift(String s, int pos)
{
String newStr;
if (s.length()>pos+1)
newStr=s.substring(pos, pos+1)
+s.substring(0, pos)
+s.substring(pos+1);
else
newStr=s.substring(pos)
+s.substring(0, pos);
return newStr;
} protected int Validate(String newNum)
{
String newGenNum=CurFixPart+newNum;
if (Integer.valueOf(newGenNum)<=Integer.valueOf(PreGenNum))
return 0;
if (newGenNum.substring(2,3).equals("4") ||
(newGenNum.indexOf("35")!=-1) || (newGenNum.indexOf("53")!=-1))
return 0; PreGenNum=newGenNum;
System.out.println(newGenNum);
return 0;
} public void GenControll(String Base)
{
PreGenNum="0";
CurFixPart="";
GenNext(Base, 0);
} void GenNext(String varPart, int curPos)
{
if (varPart.length()==2)
{
Validate(varPart);
Validate(shift(varPart, 1));
return;
}
// Next Layer
String newGen=shift(varPart, curPos);
String SavedFixPart=CurFixPart;
CurFixPart=CurFixPart+newGen.substring(0,1);
GenNext(newGen.substring(1), 0);
CurFixPart=SavedFixPart;
// 同层递增
if (curPos==varPart.length()-1)
return;
GenNext(varPart, curPos+1);
}
}
序列122345测试通过。
有什么意见请大家多多提点。
import java.util.Arrays;
public class a{
public static void main(String[] args) {
int[] arr = {4,2,1,3,2,5};
Arrays.sort(arr);
String str = Arrays.toString(arr);
str = str.replaceAll("[,\\[\\]]","");
System.out.println(new StringBuffer(str).reverse());
}
}