CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Java >  J2SE / 扩展类

一著名软件公司的java笔试算法题!

楼主javaliu2006()2006-10-09 09:02:41 在 Java / J2SE / 扩展类 提问

一著名软件公司的java笔试算法题!  
   
  算法程序题:  
   
          该公司笔试题就1个,要求在10分钟内作完。  
   
          题目如下:用1、2、2、3、4、5这六个数字,用java写一个main函数,打印出所有不同的排列,如:512234、412345等,要求:"4"不能在第三位,"3"与"5"不能相连。 问题点数:10、回复次数:69Top

1 楼haisenmai(我应该做得到)回复于 2006-10-11 11:11:42 得分 0

瓜瓜做出来了Top

2 楼zxh2208180(九天玄狐)回复于 2006-10-11 14:29:29 得分 0

还好不是太难Top

3 楼lkjx083(浪客剑心)回复于 2006-10-12 09:07:31 得分 5

小弟写了一个,不知道对不对。  
  package   test2;  
   
  public   class   Combination   {  
   
  /**  
    *   @param   args  
    */  
  private   static   int   i,   j,   k,   l,   m;  
   
  public   static   void   main(String[]   args)   {  
  //   TODO   Auto-generated   method   stub  
                  int   sum=0;  
  int[]   array   =   {   0,   0,   0,   0,   0   };  
  boolean   find   =   false;  
  int   p   =   0;  
  for   (i   =   1;   i   <=   5;   i++)   {  
  for   (j   =   1;   j   <=   5;   j++)   {  
  if   (j   ==   i)  
  continue;  
  array[0]   =   i;  
  for   (k   =   1;   k   <=   5;   k++)   {  
  if   (k   ==   j   ||   k   ==   i)  
  continue;  
  array[1]   =   j;  
  for   (l   =   1;   l   <=   5;   l++)   {  
  if   (l   ==   i   ||   l   ==   j   ||   l   ==   k   ||   k   ==   4)  
  continue;  
  array[2]   =   k;  
  for   (m   =   1;   m   <=   5;   m++)   {  
  if   (m   ==   i   ||   m   ==   j   ||   m   ==   k   ||   m   ==   l)  
  continue;  
  array[3]   =   l;  
  array[4]   =   m;  
  while   (find   ==   false   &&   p   <=   4)   {  
  if   (array[p]   ==   3   ||   array[p]   ==   5)   {  
  if   ((p   +   1)   <=   4)   {  
  if   (array[p   +   1]   ==   3  
  ||   array[p   +   1]   ==   5)   {  
  find   =   true;  
  break;  
  }  
  }  
   
  }  
  p++;  
  }  
  if   (find   ==   false)   {  
  sum++;  
  print(array);  
  }else  
  {  
  find=false;  
  }  
  p=0;  
  }  
  }  
  }  
  }  
   
  }  
  System.out.println(sum);  
  }  
   
  public   static   void   print(int[]   array)   {  
   
  for   (int   count   =   0;   count   <=   4;   count++)  
  System.out.print(array[count]);  
  System.out.println();  
   
  }  
  }  
  Top

4 楼lkjx083(浪客剑心)回复于 2006-10-12 09:18:21 得分 0

看了别人的程序实在是丢人那  
  http://community.csdn.net/Expert/topic/5068/5068524.xml?temp=.2323725Top

5 楼arbiter(同济流氓)回复于 2006-10-12 10:32:22 得分 5

看见大家循环套循环,圈圈套圈圈的写法,我实在是忍无可忍了,6个数字还好,给你一百个数字,是不是准备百环大作战了?  
  我来实现一下我之前讲的基本思路:  
  1   把问题归结为图结构的遍历问题。实际上6个数字就是六个结点,把六个结点连接成无向连通图,对于每一个结点求这个图形的遍历路径,所有结点的遍历路径就是最后对这6个数字的排列组合结果集。  
  2   显然这个结果集还未达到题目的要求。从以下几个方面考虑:  
      1.   3,5不能相连:实际要求这个连通图的结点3,5之间不能连通,   可在构造图结构时就满足改条件,然后再遍历图。  
      2.   不能有重复:   考虑到有两个2,明显会存在重复结果,可以把结果集放在TreeSet中过滤重复结果  
      3.   4不能在第三位:   仍旧在结果集中去除满足此条件的结果。  
   
  采用二维数组定义图结构,最后的代码是:  
   
  import   java.util.Iterator;  
  import   java.util.TreeSet;  
   
  public   class   TestQuestion   {  
   
  private   String[]   b   =   new   String[]{"1",   "2",   "2",   "3",   "4",   "5"};  
  private   int   n   =   b.length;  
  private   boolean[]   visited   =   new   boolean[n];  
  private   int[][]   a   =   new   int[n][n];  
  private   String   result   =   "";  
  private   TreeSet   set   =   new   TreeSet();  
   
  public   static   void   main(String[]   args)   {  
  new   TestQuestion().start();  
  }  
   
  private   void   start()   {  
   
  //   Initial   the   map   a[][]  
  for   (int   i   =   0;   i   <   n;   i++)   {  
  for   (int   j   =   0;   j   <   n;   j++)   {  
  if   (i   ==   j)   {  
  a[i][j]   =   0;  
  }   else   {  
          a[i][j]   =   1;  
  }  
  }  
  }  
   
  //   3   and   5   can   not   be   the   neighbor.  
  a[3][5]   =   0;  
  a[5][3]   =   0;  
   
  //   Begin   to   depth search.  
  for   (int   i   =   0;   i   <   n;   i++)   {  
          this.depthFirstSearch(i);  
  }  
   
  //   Print   result   treeset.  
  Iterator   it   =   set.iterator();  
  while   (it.hasNext())   {  
  String   string   =   (String)   it.next();  
  //   "4"   can   not   be   the   third   position.  
  if   (string.indexOf("4")   !=   2)   {  
  System.out.println(string);  
  }  
  }  
  }  
   
  private   void   depthFirstSearch(int   startIndex)   {  
  visited[startIndex]   =   true;  
  result   =   result   +   b[startIndex];  
  if   (result.length()   ==   n)   {  
  //   Filt   the   duplicate   value.  
  set.add(result);  
  }  
  for(int   j   =   0;   j   <   n;   j++)   {  
  if   (a[startIndex][j]   ==   1   &&   visited[j]   ==   false)   {  
  depthFirstSearch(j);  
  }   else   {  
  continue;  
  }  
  }  
   
  //   restore   the   result   value   and   visited   value   after   listing   a   node.  
          result   =   result.substring(0,   result.length()   -1);  
          visited[startIndex]   =   false;  
  }  
  }  
   
  可以结贴了。  
  Top

6 楼youshangming(明明)回复于 2006-10-12 15:52:16 得分 0

arbiter(同济流氓)   的结果还是有4在第三位。。Top

7 楼arbiter(同济流氓)回复于 2006-10-12 16:02:32 得分 0

这个代码在其它帖子里已经验证过了,绝对没问题的。你把结果贴上来看,好好检查一下,你是不是跑了我的代码  
   
  //   Print   result   treeset.  
  Iterator   it   =   set.iterator();  
  while   (it.hasNext())   {  
  String   string   =   (String)   it.next();  
  //   "4"   can   not   be   the   third   position.  
  if   (string.indexOf("4")   !=   2)   {  
  System.out.println(string);  
  }  
  }  
  }  
   
  打印结果集的代码里已经去掉4在第三位的情况了Top

8 楼oDon(孤独绑定)回复于 2006-10-12 18:44:52 得分 0

数据结构   离散数学的题目Top

9 楼datalover(白发始立发奋志)回复于 2006-10-16 21:00:54 得分 0

eeTop

10 楼skyairmj(方外)回复于 2006-10-16 21:15:43 得分 0

arbiter(同济流氓)的算法确实很妙Top

11 楼JAVA2050(箫箫秋雨)回复于 2006-10-17 09:29:53 得分 0

都比较牛,看着都晕Top

12 楼wanglian1024()回复于 2006-10-17 11:31:08 得分 0

咋看不懂题目呢,“用1、2、2、3、4、5这六个数字”怎么能打出“412345”?Top

13 楼abcwangdragon()回复于 2006-10-18 17:35:16 得分 0

确实用图来解决简化了问题,我定义了相似的类却,没想到这是图。晕Top

14 楼passos(古月春秋)回复于 2006-10-24 15:08:47 得分 0

偶也贴个程序,比较的短。也是基于递归的遍历,不过没有用图结构。  
  public   class   Assemble   {  
   
  public   void   getAssemble(String   result,   Vector<Character>   source)  
  {  
  if   (   (result.length()   ==   3)   &&   (result.charAt(2)   ==   '4')   )  
  return;  
   
  if   (   result.endsWith("35")   ||   result.endsWith("53"))  
  return;  
   
  if   (   result.length()   ==   6   )  
  {  
  System.out.println(result);  
  return;  
  }  
   
  for   (int   i=0;   i<source.size();   i++)  
  {  
  Vector<Character>   t   =   (Vector<Character>)source.clone();  
  t.remove(i);  
  getAssemble(result   +   source.get(i),   t);  
  }  
  }  
   
  /**  
    *   @param   args  
    */  
  public   static   void   main(String[]   args)   {  
  //   TODO   Auto-generated   method   stub  
  Assemble   as   =   new   Assemble();  
  Vector<Character>   v   =   new   Vector<Character>();  
  v.add('1');   v.add('2');   v.add('2');  
  v.add('3');   v.add('4');   v.add('5');  
  as.getAssemble("",   v);  
   
  System.out.println("Done");  
  }  
   
  }Top

15 楼moon_cool(月影剑)回复于 2006-10-24 15:43:54 得分 0

学习一下~~  
  Top

16 楼aondy1(爆宇)回复于 2006-10-25 17:07:47 得分 0

牛啊Top

17 楼cz0797(ksd)回复于 2006-10-25 23:08:39 得分 0

这个程序我以前考高程的时候做过,用回溯法可做出来。Top

18 楼churchatp1(别看资料,看聊效!)回复于 2006-10-26 11:21:35 得分 0

递归不久行了啊  
  呵呵Top

19 楼jszhaochengming(厚发)回复于 2006-10-26 16:20:40 得分 0

大家好,只有10分钟时间,我估计还是用for循环来做比较实惠快速,毕竟只要能把题目做出来就OK了Top

20 楼jszhaochengming(厚发)回复于 2006-10-26 16:22:45 得分 0

For循环的方法  
  public   class   Test2   {  
  public   static   void   main(String   args[])   {  
  char[]   c   =   {'1','2','2','3','4','5'};  
  for   (int   i   =   0;   i   <   c.length;   i++   )   {  
  for   (int   j   =   0;   j   <   c.length;   j++)   {  
  if   (i   ==   j   ||   (c[i]=='3'   &&   c[j]=='5'))  
  continue;  
  for   (int   k   =   0;   k   <   c.length;   k++)   {  
  if   (k==i   ||   k==j   ||   (c[j]=='3'   &&   c[k]=='5')   ||   c[k]   =='4')   {  
  continue;  
  }  
  for   (int   m   =   0;   m   <   c.length;   m++)   {  
  if   (m   ==   k   ||   m   ==   i   ||   m   ==   j   ||   (c[k]=='3'   &&   c[m]==5))   {  
  continue;  
  }  
  for   (int   n   =   0;   n   <   c.length;   n++)   {  
  if   (n   ==   m   ||   n   ==   k   ||   n   ==   i   ||   n   ==   j   ||   (c[m]=='3'   &&   c[n]=='5'))   {  
  continue;  
  }  
  for   (int   l   =   0;   l   <   c.length;   l++)   {  
  if   (l   ==   n   ||   l   ==   m   ||   l   ==   k   ||   l   ==   j   ||   l   ==   i   ||   (c[n]   ==   '3'   &&   c[l]   ==   '5'))   {  
  continue;  
  }  
  System.out.println(c[i]+""+c[j]+""+c[k]+""+c[m]+""+c[n]+""+c[l]);  
  }  
  }  
  }  
  }  
  }  
  }  
  }  
  }Top

21 楼jszhaochengming(厚发)回复于 2006-10-26 16:53:54 得分 0

递归方法  
  public   class   Test2   {  
   
  public   int[]   getNextDifPos(int[]   before,   int   add)   {  
  int   []   res   =   new   int[before.length+1];  
  for   (int   i   =   0;   i   <   before.length;   i++)   {  
  res[i]   =   before[i];  
  }  
  res[res.length-1]   =   add;  
  return   res;  
  }  
   
  public   int   getNextPos(int[]   pos)   {  
  for   (int   i   =0   ;   i   <   pos.length;   i++)   {  
  if   (pos[i]!=-1){  
  return   i;  
  }  
  }  
  return   -1;  
  }  
   
  public   void   getStr(int[]   before,char[]   chars)   {  
  if   (before.length   ==   chars.length)   {  
  StringBuffer   str   =   new   StringBuffer();  
  for   (int   i   =   0;   i   <   before.length;   i++)   {  
  str.append(chars[before[i]]);  
  }  
  //加判断条件  
  if   (str.charAt(2)=='4'   ||   str.indexOf("35")   >=0)   {  
  return   ;  
  }  
  System.out.println(str.toString());  
  }   else   if   (before.length   <   chars.length)   {  
  int[]   pos   =   new   int[chars.length];  
  for   (int   i   =   0;   i   <   before.length;   i++)   {  
  pos[before[i]]   =   -1;  
  }  
  int   nextPos;  
  while   (   (nextPos=getNextPos(pos))   !=   -1)   {  
  pos[nextPos]   =   -1;  
  getStr(getNextDifPos(before,nextPos),chars);  
  }  
  }  
  }  
   
  public   static   void   main(String   args[])   {  
  char[]   c   =   {'1','2','2','3','4','5'};  
  int[]   l   =   {};  
  Test2   t   =   new   Test2();  
  t.getStr(l,c);  
                    }  
  }Top

22 楼eureka0891(迷茫中...)回复于 2006-10-27 10:57:06 得分 0

package   find;  
   
  import   java.util.ArrayList;  
  import   java.util.Arrays;  
  import   java.util.Iterator;  
  import   java.util.List;  
   
  public   class   Combination   {  
  public   static   void   main(String[]   args)   throws   Exception   {  
  int[]   array   =   new   int[]   {   1,   2,   2,   3,   4,   5   };  
  List   result=new   ArrayList();  
  find(array,   new   int[0],result);  
  for   (int   i   =   0;   i   <   result.size();   i++)   {  
  int[]   resultArray=(int[])result.get(i);  
  System.out.println(i+"\t=:"+Arrays.toString(resultArray));  
  }  
  }  
   
  public   static   void   find(final   int[]   restArray,   final   int[]   inArray,   List   result){  
  if(restArray.length   ==   1){  
  int   now   =   restArray[restArray.length-1];  
  if(inArray[inArray.length-1]   ==   3   &&   now   ==   5){  
  return;  
  }else   if(inArray[inArray.length-1]   ==   5   &&   now   ==   3){  
  return;  
  }  
  int[]   resultArray=new   int[inArray.length   +1];  
  System.arraycopy(inArray,   0,   resultArray,   0,   inArray.length);  
  resultArray[inArray.length]=now;  
  result.add(resultArray);  
  }else{  
  for   (int   i   =   0;   i   <   restArray.length;   i++)   {  
  int   now   =   restArray[i];  
  //check   3rd   is   not   4,   skip  
  if(   inArray.length   ==   2     &&   now   ==   4){  
  continue;  
  }  
  //check   3,5   order  
  if(   inArray.length   >   0){  
  if(inArray[inArray.length-1]   ==   3   &&   now   ==   5){  
  continue;  
  }else   if(inArray[inArray.length-1]   ==   5   &&   now   ==   3){  
  continue;  
  }  
  }  
  int[]   nextRestArray=new   int[restArray.length   -1];  
  int[]   nextInArray=new   int[inArray.length   +1];  
  System.arraycopy(restArray,0,   nextRestArray,   0,   i);  
  System.arraycopy(restArray,i+1,   nextRestArray,   i,   nextRestArray.length-i);  
  System.arraycopy(inArray,   0,   nextInArray,   0,   inArray.length);  
  nextInArray[inArray.length]=now;  
  find(nextRestArray,   nextInArray,   result);  
  }  
  }  
  }  
   
  }  
  Top

23 楼eureka0891(迷茫中...)回复于 2006-10-27 11:36:47 得分 0

还有就是如果考虑1、2、2、3、4、5里有两个2  
  则程序如下:  
  package   find;  
   
  import   java.util.ArrayList;  
  import   java.util.Arrays;  
  import   java.util.Iterator;  
  import   java.util.List;  
   
  public   class   Combination   {  
  public   static   void   main(String[]   args)   throws   Exception   {  
  int[]   array   =   new   int[]   {   1,   2,   2,   3,   4,   5   };  
  List   result=new   ArrayList();  
  find(array,   new   int[0],result);  
   
  for   (int   i   =   0;   i   <   result.size();   i++)   {  
  int[]   resultArray=(int[])result.get(i);  
  System.out.println(i+"\t=:"+Arrays.toString(resultArray));  
  }  
  }  
   
  public   static   void   find(final   int[]   restArray,   final   int[]   inArray,   List   result){  
  if(restArray.length   ==   1){  
  int   now   =   restArray[restArray.length-1];  
  if(inArray[inArray.length-1]   ==   3   &&   now   ==   5){  
  return;  
  }else   if(inArray[inArray.length-1]   ==   5   &&   now   ==   3){  
  return;  
  }  
  int[]   resultArray=new   int[inArray.length   +1];  
  System.arraycopy(inArray,   0,   resultArray,   0,   inArray.length);  
  resultArray[inArray.length]=now;  
  result.add(resultArray);  
  }else{  
  boolean   first2=false;  
  boolean   second2=false;  
  for   (int   i   =   0;   i   <   restArray.length;   i++)   {  
  int   now   =   restArray[i];  
  if(now   ==   2){  
  if(first2   ==   false)   first2   =   true;  
  else   second2   =   true;  
  }  
  if(second2){  
  first2=false;  
  second2=false;  
  continue;  
  }  
   
  //check   3rd   is   not   4,   skip  
  if(   inArray.length   ==   2     &&   now   ==   4){  
  continue;  
  }  
  //check   3,5   order  
  if(   inArray.length   >   0){  
  if(inArray[inArray.length-1]   ==   3   &&   now   ==   5){  
  continue;  
  }else   if(inArray[inArray.length-1]   ==   5   &&   now   ==   3){  
  continue;  
  }  
  }  
  int[]   nextRestArray=new   int[restArray.length   -1];  
  int[]   nextInArray=new   int[inArray.length   +1];  
  System.arraycopy(restArray,0,   nextRestArray,   0,   i);  
  System.arraycopy(restArray,i+1,   nextRestArray,   i,   nextRestArray.length-i);  
  System.arraycopy(inArray,   0,   nextInArray,   0,   inArray.length);  
  nextInArray[inArray.length]=now;  
  find(nextRestArray,   nextInArray,   result);  
  }  
  }  
  }  
   
  }  
  Top

24 楼hdhmail2000(禅剑飞雪)回复于 2006-10-30 18:09:52 得分 0

呵呵,看看我这个怎么样,十分钟我估计不能写的太复杂:  
  public   class   Ok   {  
   
  /**  
    *   @param   args  
    */  
  public   static   void   main(String[]   args)    
  {  
  for(int   i=111111;i<=555555;i++)  
  {  
      String   a=String.valueOf(i);  
      String[]   b=a.split("");  
      int   flag=0;  
      if(b[2].equalsIgnoreCase("4"))  
      {  
  flag=1;  
      }  
      if(flag!=1)  
      {  
      for(int   j=0;j<b.length;j++)  
      {  
  if(b[j].equalsIgnoreCase("6"))  
  {  
  flag=1;  
  break;  
  }  
  if(b[j].equalsIgnoreCase("7"))  
  {  
  flag=1;  
  break;  
  }  
  if(b[j].equalsIgnoreCase("8"))  
  {  
  flag=1;  
  break;  
  }  
  if(b[j].equalsIgnoreCase("9"))  
  {  
  flag=1;  
  break;  
  }  
  if(b[j].equalsIgnoreCase("0"))  
  {  
  flag=1;  
  break;  
  }  
  if(j<b.length-1)  
  {  
  if((b[j]+b[j+1]).equalsIgnoreCase("35")||(b[j]+b[j+1]).equalsIgnoreCase("53"))  
  {  
  flag=1;  
  break;  
  }  
  }  
      }  
      }  
      if(flag==0)  
      {  
      System.out.println(i);  
      }  
   
  }  
   
  }  
   
  }  
  Top

25 楼woaiwanghuan(我不学习是猪)回复于 2006-10-31 15:52:29 得分 0

数据结构书上有!Top

26 楼CpRcF(尘埃)回复于 2006-10-31 15:56:47 得分 0

这样算不算?  
   
  import   java.io.*;  
   
  public   class   Test   {  
  public   static   void   main(String[]   args)   throws   Exception{  
  //   TODO   Auto-generated   method   stub  
  FileWriter   out   =   new   FileWriter("result.txt");  
  int   count   =   0;  
  for(int   i   =   122345;i   <=   543221;i++)   {  
  String   s   =   new   String(i   +   "   ,   ");  
  if(s.indexOf("4")   ==   2){  
  continue;  
  }   else   if(s.indexOf("35")   >=   0   ||   s.indexOf("53")   >=   0)   {  
  continue;  
  }   else   {  
  count   ++;  
  out.write(s,0,s.length());  
  }  
  }  
  System.out.println("find   :   "   +   count);  
  out.close();  
  }  
  }Top

27 楼woaiwanghuan(我不学习是猪)回复于 2006-10-31 16:13:35 得分 0

我做不完!Top

28 楼woaiwanghuan(我不学习是猪)回复于 2006-10-31 16:19:55 得分 0

等价成图遍历,同时规定连通方向,是不错的解决办法Top

29 楼daizhenbest(牛牛)回复于 2006-11-02 23:35:14 得分 0

一著名软件公司的java笔试算法题!  
   
  算法程序题:  
   
          该公司笔试题就1个,要求在10分钟内作完。  
   
          题目如下:用1、2、2、3、4、5这六个数字,用java写一个main函数,打印出所有不同的排列,如:512234、412345等,要求:"4"不能在第三位,"3"与"5"不能相连。  
  ----------------------------------------------------------------------------------  
   
  人家是要"一个main函数"................Top

30 楼phuwan()回复于 2006-11-15 12:53:23 得分 0

upTop

31 楼jianghuxiaoxiami(江湖小虾米)回复于 2006-11-15 15:35:56 得分 0

CpRcF(尘埃)     思路确实新颖,简单明了Top

32 楼hinco(桃色德鲁依)回复于 2006-11-16 18:38:39 得分 0

只一个main的话用递推吧,和八皇后的递推类似Top

33 楼maka007(零下一度)回复于 2006-11-16 19:26:02 得分 0

CpRcF(尘埃)     思路确实新颖,简单明了Top

34 楼merobert()回复于 2006-11-16 22:29:32 得分 0

CpRcF(尘埃)   好像没有理解对题目Top

35 楼Matthiola(Matthiola)回复于 2006-11-17 09:34:17 得分 0

CpRcF(尘埃)     是对的啊       4   不能在   3         35   不相连Top

36 楼softdn2()回复于 2006-11-17 12:39:45 得分 0

这么简单的。HARD   CODE好了  
   
   
  ------   以下是签名   ------  
  SoftDN.com,   提供免费的项目管理平台:SVN仓库、需求管理、BUG跟踪、任务管理、在线论坛、网站空间、项目存储及完整的备份等。欢迎网友光临建立项目,开创自己的梦想。  
  地址:http://www.softdn.com       http://www.softdn.cnTop

37 楼Neil_Dang(C∞l Dog)回复于 2006-11-17 16:40:52 得分 0

不晓得对不对   你们看一下  
  public   void   print(List   nums1,   List   nums2)  
  {  
  if   (nums1   !=   null   &&   nums2   !=   null)  
  {  
  ArrayList   list   =   new   ArrayList();  
  String   temp   =   "";  
  String   temp1   =   "";  
  String   temp2   =   "";  
  for   (int   i   =   0;   i   <   nums1.size();   i++)  
  {  
  for   (int   j   =   0;   j   <   nums2.size();   j++)  
  {  
  temp   =   nums1.get(i).toString()   +   nums2.get(j).toString();  
  temp1   =   nums1.get(i).toString();  
  temp2   =   nums2.get(j).toString();  
  {  
  char[]   tmp   =   temp.toCharArray();  
  boolean   isUsable   =   true;  
  for   (int   k   =   0;   k   <   tmp.length;   k++)  
  {  
  if   (isDup(temp,   tmp[k]))  
  {  
  isUsable   =   false;  
  break;  
  }  
   
  if   (k   <   tmp.length   -   1)  
  {  
  if   (Integer.parseInt(String.valueOf(tmp[k]))  
  +   Integer.parseInt(String.valueOf(tmp[k+1]))   ==   8)  
  {  
  isUsable   =   false;  
  break;  
  }  
  }  
  }  
   
  if   (isUsable)  
  {  
  list.add(temp);  
  if   (temp.length()   ==   6   &&   temp.charAt(3)   ==   '4')  
  {  
  System.out.println(temp);  
  }  
  }  
  }  
  }  
  }  
  if   (temp.length()   <6){  
  if   (temp1.length()   ==   temp2.length())  
  {  
  print(list,   nums1);  
  }   else  
  {  
  print(list,   nums1);  
  print(list,   nums2);  
  }  
  }  
  }   else   if   (nums1   !=   null)  
  {  
  print(nums1,   nums1);  
  }   else   if   (nums2   !=   null)  
  {  
  print(nums2,   nums2);  
  }  
  }  
   
  public   boolean   isDup(String   str,   char   ch)  
  {  
  int   start   =   str.indexOf(ch);  
  int   end   =   str.lastIndexOf(ch);  
   
  if   (start   !=   end)  
  return   true;  
  else  
  return   false;  
  }Top

38 楼Neil_Dang(C∞l Dog)回复于 2006-11-17 16:57:29 得分 0

直接从ECLIPSE里面COPY出来的   没想到这么乱  
  可以把程序拷贝运行   一共有64个值   不知道对不对  
  public   class   Test  
  {  
        public   static   void   main(String[]   args)  
        {  
              ArrayList   list   =   new   ArrayList();  
              list.add("1");  
              list.add("2");  
              list.add("3");  
              list.add("4");  
              list.add("5");  
              list.add("6");            
              new   Test().print(list,   null);  
        }  
  }Top

39 楼nako_ruru(娜可露露)回复于 2006-11-18 11:36:22 得分 0

public   class   Combination   {  
   
   
          public   static   void   main(String[]   args)   {  
  Character[]   numbers   =   new   Character[]   {'1',   '2',   '2',   '3',   '4',   '5'};  
  Collection<String>   combinations   =   combine(Arrays.asList(numbers));  
  System.out.printf("共计%d个\n",   combinations.size());  
  for(String   buffer:   combinations)   {  
                          System.out.println(buffer);  
  }  
          }  
   
          private   static   Set<String>   combine(Collection<Character>   characters)   {  
  if(characters.size()   ==   1)   {  
                          String   value   =   characters.iterator().next().toString();  
                          return   Collections.singleton(value);  
                  }  
                  Set<String>   returnValue   =   new   TreeSet();  
                  //遍历ccharacters中的每一个字符,将剩余的字符作为一个集体  
                  for(Character   c:   characters)   {  
   
                          Collection<Character>   left   =   new   LinkedList(characters);  
                          left.remove(c);  
   
                          Collection<String>   combinations   =   combine(left);  
                          for(String   buffer:   combinations)   {  
                                  String   newBuffer   =   buffer   +   c;  
                                  if(filter(newBuffer))   {  
                                          returnValue.add(newBuffer);  
                                  }  
                          }  
                  }  
                  return   returnValue;  
          }  
   
          private   static   boolean   filter(String   value)   {  
                  int   length   =   value.length();  
                  if(length   <   2)   {  
                          return   true;  
                  }  
                  if(value.endsWith("35")   ||   value.endsWith("53"))   {  
                          return   false;  
                  }  
                  if(length   <   4)   {  
                          return   true;  
                  }  
                  if(value.charAt(3)   ==   '4')   {  
                          return   false;  
                  }  
                  return   true;  
          }  
   
  }Top

40 楼rypgood(失魂)回复于 2006-11-19 02:28:33 得分 0

class   TestFloat    
  {  
  public   static   void   main(String[]   args)    
  {  
  char[]   a="12345".toCharArray();  
  char[]   b=new   char[a.length];  
  for(int   i=0;i<5;i++)  
  {  
  b[0]=a[i];  
  drop(a,i);  
  for(int   j=0;j<4;j++)  
  {  
  b[1]=a[j];  
  drop(a,j);  
  for(int   k=0;k<3;k++)  
  {  
  b[2]=a[k];  
  drop(a,k);  
  for(int   l=0;l<2;l++)  
  {  
  b[3]=a[l];  
  drop(a,l);  
  b[4]=a[0];  
  System.out.println(new   String(b).toString());  
  a="12345".toCharArray();  
  }  
  }  
  }  
  }  
   
  }  
  static   void     drop(char[]   a,int   i)  
  {  
  for(int   j=i+1;j<a.length;j++)  
  {  
  a[j-1]=a[j];  
  }  
  }  
  }Top

41 楼rypgood(失魂)回复于 2006-11-19 02:30:13 得分 0

啊哦     竟然是错的,不好意思哈Top

42 楼rypgood(失魂)回复于 2006-11-19 02:40:52 得分 0

class   TestFloat    
  {  
  public   static   void   main(String[]   args)    
  {  
  char[]   a="12345".toCharArray();  
  char[]   b=new   char[a.length];  
  for(int   i=0;i<5;i++)  
  {  
  b[0]=a[i];  
  drop(a,i);  
  for(int   j=0;j<4;j++)  
  {  
  b[1]=a[j];  
  drop(a,j);  
  for(int   k=0;k<3;k++)  
  {  
  b[2]=a[k];  
  drop(a,k);  
  for(int   l=0;l<2;l++)  
  {  
  b[3]=a[l];  
  drop(a,l);  
  b[4]=a[0];  
  System.out.println(new   String(a).toString());  
  a="12345".toCharArray();  
  }  
  }  
  }  
  }  
   
   
  }  
  static   void     drop(char[]   a,int   i)  
  {  
  char   x=a[i];  
  for(int   j=i+1;j<a.length;j++)  
  {  
  a[j-1]=a[j];  
  }  
  a[a.length-1]=x;  
  }  
  }  
   
   
  这次应该没有错了吧Top

43 楼chen77716(tony)回复于 2006-11-23 10:32:16 得分 0

static   int[]   bits   =   new   int[]   {   1,   2,   3,   4,   5   };  
   
  /**  
    *   @param   args  
    */  
  public   static   void   main(String[]   args)   {  
  sort("",   bits);  
  }  
   
  private   static   void   sort(String   prefix,   int[]   a)   {  
  if   (a.length   ==   1)   {  
  System.out.println(prefix   +   a[0]);  
  }  
   
  for   (int   i   =   0;   i   <   a.length;   i++)   {  
  sort(prefix   +   a[i],   copy(a,   i));  
  }  
  }  
   
  private   static   int[]   copy(int[]   a,int   index){  
  int[]   b   =   new   int[a.length-1];  
  System.arraycopy(a,   0,   b,   0,   index);  
  System.arraycopy(a,   index+1,   b,   index,   a.length-index-1);  
  return   b;  
  }Top

44 楼rypgood(失魂)回复于 2006-11-25 16:16:51 得分 0

楼上的算法厉害  
  能不能解释一下啊Top

45 楼liurong198426(平淡生活)回复于 2006-11-28 00:37:04 得分 0

CpRcF(尘埃)兄的思路确实很独特,只是中间差了一些代码!可以利用  
  indexOf(String   str,   int   fromIndex)   函数来确定是否将{1,2,2,3,4,5}都包含进去了~  
  就OK  
   
  佩服CpRcF(尘埃)兄Top

46 楼phuwan()回复于 2006-12-02 13:00:09 得分 0

大家好像都写的不错了哦~  
  嘿嘿~~~  
  Top

47 楼weky(weky)回复于 2006-12-04 10:16:17 得分 0

矿用循环  
  ~~~~~~~Top

48 楼amu112964()回复于 2006-12-05 15:22:11 得分 0

学到不少东东!Top

49 楼mixianger(米香儿)回复于 2006-12-05 16:15:12 得分 0

好帖留名。Top

50 楼hujiaboy(勿以恶小而不为)回复于 2006-12-07 22:11:09 得分 0

10分钟。。。牛啊Top

51 楼gfcs19840222(相信时间)回复于 2006-12-07 23:57:24 得分 0

用经典的全排列算法求出所有的组合,按照要求去掉他不要的。  
  google   permute   algorithm  
  我记得以前背过,不用图算法,代码很短。  
  现在忘了。呵呵。Top

52 楼XXKKFF(齐次边界条件有界弦自由振动方程混合问题的分离变量法-_-!!!)回复于 2006-12-09 22:37:31 得分 0

强啊  
  我顶Top

53 楼xiciliu()回复于 2006-12-10 01:12:08 得分 0

markTop

54 楼gd_frank(frank)回复于 2006-12-11 16:30:39 得分 0

public   class   Untitled1   {  
          public   static   int   count=0;  
          public   Untitled1()   {  
          }  
          /**  
            *   递归处理  
            *   @param   buffer   char[]  
            *   @param   col   int  
            *   @param   printBuffer   char[]  
            */  
          private   static   void   print(char[]   buffer,int   col,char[]   printBuffer){  
                  int   i,j,z;  
                  char[]   tmpBuffer;  
                  char[]   prnBuffer=new   char[6];  
                  for(i=0;   i<buffer.length;   i++){  
                          printBuffer[col]=buffer[i];  
                          if(printBuffer[2]=='4')  
                                  continue;  
                          if(col>1){  
                                  if   (printBuffer[col]   ==   '5'   &&   printBuffer[col   -   1]   ==   '3')  
                                          continue;  
                                  if   (printBuffer[col]   ==   '3'   &&   printBuffer[col   -   1]   ==   '5')  
                                          continue;  
                          }  
                          prnBuffer=String.valueOf(printBuffer,0,printBuffer.length).toCharArray();  
                          if   (buffer.length==1){  
                                  System.out.println(prnBuffer);  
                          }  
                          tmpBuffer=new   char[buffer.length-1];  
                          for(j=0,z=0;   j<buffer.length;   j++){  
                                  if   (j!=i)  
                                          tmpBuffer[z++]=buffer[j];  
                          }                                  
                          if(col<6){  
                                  print(tmpBuffer,   col   +   1,   prnBuffer);  
                                  count++;  
                          }  
                  }  
          }  
          public   static   void   main(String[]   args)   {  
                  char[]   buffer=new   char[]{'1','2','2','3','4','5'};  
                  char[]   printBuffer=new   char[6];  
                  Untitled1   u=new   Untitled1();  
                  u.print(buffer,0,printBuffer);  
                  System.out.println("总数为:"+u.count);  
          }  
  }Top

55 楼jesse8013(每天进步一点点)回复于 2006-12-12 21:47:50 得分 0

偶也   写了个   不过   偶发得时间   >>大于   10m     ;<  
  import   java.util.*;  
  public   class   ComSort   {  
  private   ArrayList   res;  
  public   ComSort(){  
  res=new   ArrayList();  
  }  
  public   static   void   main(String[]   args){  
  ArrayList   array=new   ArrayList();  
  StringBuffer   sb=new   StringBuffer();  
  for(int   i=1;i<6;i++){  
  array.add(i);  
  }  
   
  ComSort   cs=new   ComSort();  
  cs.compute(array,sb);  
    ArrayList   res=cs.getArray();  
   
  ArrayList   remove=new   ArrayList();  
  for(Object   o:res){  
  String   value=o.toString();  
    if((value.indexOf("4")==2)||(value.indexOf("45")!=-1)){  
    remove.add(value);  
    }  
  }  
   
    for(Object   o:remove){  
      res.remove(o);  
    }  
    for(Object   o:res){  
    System.out.println(o.toString());  
    }  
     
  }  
  public     void   compute(ArrayList   array,StringBuffer   sb){  
  if(!array.isEmpty()){  
   
  for(int   i=0;i<array.size();i++){  
  sb.append(array.get(i));  
  ArrayList   array2=(ArrayList)array.clone();  
  array2.remove(i);  
  compute(array2,sb);  
  sb.delete(sb.length()-1,sb.length());  
  }  
  }else{  
  res.add(sb.toString());  
  }  
  }  
  public   ArrayList   getArray(){  
  return   res;  
  }  
  }  
   
  Top

56 楼auuppp()回复于 2007-02-26 17:44:59 得分 0

楼上的你的3和5     相连了     重写   我是个菜鸟   啥也不会Top

57 楼colinmok(colinmok)回复于 2007-02-27 10:46:08 得分 0

高呀..Top

58 楼colinmok(colinmok)回复于 2007-02-27 10:46:29 得分 0

学习中...Top

59 楼whyxx(最近有点闲)回复于 2007-02-27 16:50:38 得分 0

随便写了一个,效率可能不是很高  
  import   java.io.BufferedWriter;  
  import   java.io.FileWriter;  
   
  public   class   Test   {  
  public   static   void   main(String[]   args)   throws   Exception   {  
  BufferedWriter   out   =   new   BufferedWriter(new   FileWriter("result.txt"));  
  String   separator   =   System.getProperty("line.separator");  
  int   count   =   0;  
  for   (int   i   =   122345;   i   <=   543221;   i++)   {  
  String   s   =   ""   +   i;  
  if   (s.indexOf("4")   ==   2)   {  
  continue;  
  }   else   if   (s.indexOf("35")   >=   0   ||   s.indexOf("53")   >=   0)   {  
  continue;  
  }   else   {  
  String   aaa   =   "122345";  
  boolean   exist   =   true;  
  for   (int   j   =   0;   j   <   s.length();   j++)   {  
  char   a   =   s.charAt(j);  
  int   index   =   aaa.lastIndexOf(a);  
  if   (index   ==   -1)   {  
  exist   =   false;  
  break;  
  }   else   {  
  aaa   =   aaa.substring(0,   index)   +   aaa.substring(index   +   1);  
  }  
  }  
  if   (!exist)   {  
  continue;  
  }  
  count++;  
  out.write(s   +   separator);  
  }  
  }  
  System.out.println("find   :   "   +   count);  
  out.close();  
  }  
  }Top

60 楼d8111()回复于 2007-02-28 09:49:32 得分 0

学习了。。。图然来是这么用的Top

61 楼vickcy(逍遥孤云)回复于 2007-02-28 14:39:43 得分 0

mark  
  Top

62 楼RedCnMFW(9点31分)回复于 2007-02-28 19:05:37 得分 0

学习.学习.Top

63 楼lxwin01(阿幸)回复于 2007-02-28 21:07:40 得分 0

markTop

64 楼lrsbill()回复于 2007-03-03 18:46:15 得分 0

学习.学习.Top

65 楼jpinglove()回复于 2007-03-03 22:39:58 得分 0

高手怎么都躲这里了.Top

66 楼guoxulijie()回复于 2007-03-03 23:45:51 得分 0

我新手     ,大家不要见笑,   我想能不能这样考虑着个问题         :  
                      利用java   中的集合   象   arriylist   等     先把着6个数字   放到集合中   然后进行混排,  
  然后依次取出,下来再进行判断   是否满足条件   不满足的话   返回继续循环     满足的话输出   返回继续循环       。        
                      大家看下着样行吗     ?Top

67 楼xuzhenqinandy(许振勤)回复于 2007-03-04 09:32:31 得分 0

CpRcF(尘埃)兄弟有的地方写的不全,我改拉下程序。下面应该符合楼主的要求  
   
  import   java.io.FileWriter;  
  import   java.util.regex.Pattern;  
  import   java.util.regex.Matcher;  
   
  public   class   Test   {  
          public   static   void   main(String[]   args)   throws   Exception   {  
                  FileWriter   out   =   new   FileWriter("result.txt");  
                  for   (int   i   =   122345;   i   <=   543221;   i++)   {  
                          String   s   =   String.valueOf(i);  
                          if   (s.indexOf("35")   >=   0   ||   s.indexOf("53")   >=   0)   {  
                                  continue;  
                          }   else{  
                                  //必须是1,2,3,4,5之间的数字  
                                  Pattern   p   =   Pattern.compile("^[1-5]{6}$");  
                                  Matcher   m   =   p.matcher(s);  
                                  boolean   b   =   m.matches();  
                                  if   (b)   {  
                                          //第三位不能为4  
                                          Pattern   pat   =   Pattern.compile("^[1-5]{2}[^4][1-5]{3}$");  
                                          Matcher   mat   =   pat.matcher(s);  
                                          boolean   bool   =   mat.matches();  
                                          if   (bool)   {  
                                                  s   =   s   +   "\r\n";  
                                                  out.write(s,   0,   s.length());  
                                          }  
                                  }  
                          }  
                  }  
                  out.close();  
          }  
  }Top

68 楼passyt(与笑凌)回复于 2007-03-06 14:01:16 得分 0

10分钟的题目,没必要那么的认真撒:  
  for(int   i=122345;i<=543221;i++){  
  String   temp=String.valueOf(i);  
  if(temp.indexOf("1")+temp.indexOf("2")+temp.lastIndexOf("2")+temp.indexOf("3")+temp.indexOf("4")+temp.indexOf("5")==0+1+2+3+4+5  
  &&temp.indexOf("1")>=0&&temp.lastIndexOf("2")>=0&&temp.indexOf("2")>=0&&temp.indexOf("3")>=0&&temp.indexOf("4")>=0&&temp.indexOf("5")>=0){  
  if(temp.charAt(2)!='4'&&temp.indexOf("35")==-1&&temp.indexOf("53")==-1)  
  System.out.println(temp);  
  }  
  }Top

69 楼linger52102(Java工兵)回复于 2007-03-07 09:29:10 得分 0

这样的题目在十分钟内写出算法和程序并调试出来很有难度哎,定Top

相关问题

关键词

得分解答快速导航

  • 帖主:javaliu2006
  • lkjx083
  • arbiter

相关链接

  • CSDN Java频道
  • Java类图书
  • Java类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo