日期:2014-05-20  浏览次数:20687 次

没思路没思路啊 大侠留步!
给你1 2 3 4 5 6 这个六个数 让你打印所有组合的结果 4不能排在第三位 3和5不能相邻


------解决方案--------------------
这不是普遍的排列组合题么?不用程序自己都能算出来了
------解决方案--------------------
少年,,等会,,哥现在去写。。
------解决方案--------------------
反过来想想好像不错。
------解决方案--------------------
这问题前几周有人就发过了,好像叫什么面试题之类的,自己找找吧。
一点思路:递归。
------解决方案--------------------

百度了一下,学习一下!
package testWork;
  
/** 
 *
 * 用1、2、2、3、4、5这六个数字,用java写一个程序,打印出所有不同的排列 
 * 如:512234、412345等,要求:"4"不能在第三位,"3"与"5"不能相连。 
 *
 * @author user 
 * @version [版本号, Jun 29, 2011] 
 * @see [相关类/方法] 
 * @since [产品/模块版本] 
 */
public class Test1
{
private int[] numbers = new int[] {1, 2, 3, 3, 4, 5};

public int n;

private String lastResult = "";

private boolean validate(String s)
{
if (s.compareTo(lastResult) <= 0) //按字典顺序比较两个字符串。
{
return false;
}
if (s.charAt(2) == '4')//"4"不能在第三位
{
return false;
}
if (s.indexOf("35") >= 0 || s.indexOf("53") >= 0)//"3"与"5"不能相连
{
return false;
}
return true;
}
/** 
* <一句话功能简述> 
* <功能详细描述> 
* @param index 
* @param result [参数说明] 
*
* @return void [返回类型说明] 
* @exception throws [违例类型] [违例说明] 
* @see [类、类#方法、类#成员]
*/
public void list(String index, String result)
{
for (int i = 0; i < numbers.length; i++)
{
if (index.indexOf(i+48) < 0)
{
String s = 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);
}
}
}
/** 
* 主程序入口 
* <功能详细描述> 
* @param args [参数说明] 
*
* @return void [返回类型说明] 
* @exception throws [违例类型] [违例说明] 
* @see [类、类#方法、类#成员] 
*/
public static void main(String[] args)
{
Test1 t = new Test1();
t.list("", "");
System.out.println("总数:" + t.n);
}
}