A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王飞 中级黑马   /  2012-7-20 19:00  /  2035 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

{:soso_e130:}
/*问题:用1、2、2、3、4、5这六个数字,用java写一个main函数,打印出所有不同的排列,如:512234、412345等,要求:"4"不能在第三位,"3"与"5"不能相连。

                解答的大牛,希望给出思路和给出代码的注释谢谢*/



为什么关于这道题我回答不了了啊,发帖限制了啊版主。。。版主说回答的给3分,所以我就拿着上课的时间做这道题马上下课了,先把我的代码附加上,要求:"4"不能在第三位,"3"与"5"不能相连。这个条件还没来得及思考,但是我应该没问题,刚把所有得排列个数一一打印出来了
明天不上课上不了网啊,后面的条件我周一上课了在把他编完,然后传上来

希望各位版主看在我实在诚恳的份上不要因为我没达到要求而扣分额,我是真的没时间了啊。。已经敲铃了....
周一一定把后续代码补齐然后发上来


以下是我思路、代码和注释:

我的代码应该很容易理解,由于时间关系没有细致的注释,望谅解,周一来补齐

public class test1
{
        public static void main(String[] args)
        {
                 String[] a1 = new String[]{"1","2","2","3","4","5"};
                 String[] a2 = new String[]{"1","2","2","3","4","5"};
                 String[] a3 = new String[]{"1","2","2","3","4","5"};
                 String[] a4 = new String[]{"1","2","2","3","4","5"};
                 String[] a5 = new String[]{"1","2","2","3","4","5"};
                 String[] a6 = new String[]{"1","2","2","3","4","5"};
                 
                 
                 String s1 = null;
                     String s2 = null;
                     String s3 = null;
                     String s4 = null;
                     String s5 = null;
                     String s6 = null;
                     
                     //s1到s6表示的都是每个数的位置
                     //x1到x6表示的是数组的元素角标

                //每个for循环表示一个数

                 for(int x1 = 0;x1<a1.length;x1++)//用1和下面的每一位组合一次
                 {                   
                         s1 = a1[x1];
                         for(int x2 = 0;x2<a2.length;x2++)//用2和下面的每一位组合一次
                         {               
                                 if(x1!=x2) //a1的角标和a2的角标不能相同,即:如果a1[0]==1,那么a2[0]==1时就不组合,以下以此类推
                                 {
                                         s2 = s1+ a2[x2];                                         
                                         for(int x3 = 0;x3<a3.length;x3++)
                                 {                 
                                         if(x1!=x2 && x1!=x3 && x2!=x3)//a1,a2,a3的角标不同才组合
                                         {         
                                               
                                                 s3 = s2+ a3[x3];
                                                 for(int x4 = 0;x4<a4.length;x4++)
                                         {               
                                                 if(x1!=x2 && x1!=x3 && x1!=x4 &&x2!=x3 &&x2!=x4 && x3!=x4 )
                                                 {
                                                         s4 = s3+ a4[x4];
                                                         for(int x5 = 0;x5<a5.length;x5++)
                                                 {                 
                                                         if(x1!=x2 && x1!=x3 && x1!=x4 && x1!=x5 &&x2!=x3 &&x2!=x4 && x2!=x5 && x3!=x4 &&x3!=x5)
                                                         {
                                                                 s5 = s4+ a5[x5];
                                                                 for(int x6 = 0;x6<a6.length;x6++)
                                                         {               
                                                                 if(x1!=x2 && x1!=x3 && x1!=x4 && x1!=x5 && x1!=x6 &&x2!=x3 &&x2!=x4 && x2!=x5 &&x2!=x6 && x3!=x4 &&x3!=x5 && x3!=x6 && x4!=x5 &&x4!=x6&& x5!=x6)
                                                                 {          
                                                                         s6 = s5+ a6[x6];
                                                                         System.out.println(s6);
                                                                          
                                                                 }                                                                       
                                                         }
                                                                  
                                                         }                                                                       
                                                 }
                                                          
                                                          
                                                 }                                                                       
                                         }
                                                  
                                         }                                                                       
                                 }
                                 }   
                                 
                         }
                 }
        
        }
           
}

//此题本人花着上课的时间做的哦,做了好久啊个么,

//此题仔细看是可以看懂的,很容易理解额



4 个回复

倒序浏览
个么粘贴自己运行下没问题的饿  
我走了,周一附上最终答案
{:soso_e101:}
回复 使用道具 举报
呵呵,我跟兄弟一样。
也做了好长时间,做好了以后,不能发了。

很高兴能遇到:一起做同一件事的人。
也贴一下代码:{:soso_e121:} {:soso_e121:}



import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;

/*
要求:4不在第3位,3和5不挨着
*/

public class TestQuest {
        public static void main(String[] args) {
                String s = "122345";// 原字符串
                Set<String> result = set(s, "");// 列出字符的组合,放入result
                // 用枚举来做遍历
                for (Iterator iterator = result.iterator(); iterator.hasNext();) {
                        String str = (String) iterator.next();
                        if (str.charAt(2) == '4') {
                                iterator.remove();
                        } else if (str.indexOf("35") >= 0 || str.indexOf("53") >= 0) {
                                iterator.remove();
                        }
                }
                //打印出结果
                System.out.println(result);
                //打印出个数
                System.out.println(result.size());
               

        }

        /*
         * /** 列出基础字符串(base)的所有组合
         *
         * @param base 以该字符串作为基础字符串,进行选择性组合。
         * @param buff 所求字符串的临时结果
         * @param result 存放所求结果
         *
         */
        public static Set<String> set(String base, String buff)

        {
                Set<String> result = new HashSet<String>();

                if (base.length() <= 0) {
                        result.add(buff);
                }
                for (int i = 0; i < base.length(); i++) {

                        Set<String> temp = set(new StringBuilder(base).deleteCharAt(i)
                                        .toString(), buff + base.charAt(i));
                        result.addAll(temp);

                }

                return result;
        }

}

点评

这位兄弟的代码确实很不错!  发表于 2012-7-20 21:15

评分

参与人数 1技术分 +1 收起 理由
韦念欣 + 1 虽然加分时间已过,但是这位兄弟的代码确实.

查看全部评分

回复 使用道具 举报
陈少文 发表于 2012-7-20 19:38
呵呵,我跟兄弟一样。
也做了好长时间,做好了以后,不能发了。

代码不是这样贴 的, 记得代码要选择插入代码 你这样代码太难看了
回复 使用道具 举报
{:soso__6235880048239246314_3:}唉,难怪你们得分这么苦逼,那是滔哥,黑马传说中的滔哥啊,不是你们所说的版主。管理员啊,唉,你们怎么能这么无知啊!

点评

时间一到,传说中的涛哥就把帖子限制了。  发表于 2012-7-20 23:45
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马