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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始


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


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


//此题已经完毕,现在上传结果   运行下就OK了

//此题思路:
/*
* 先打印两位的排列方式,然后去掉3和5相连的情况,然后在第二位的基础上去确定第三位,在去掉3和5相连的情况。。。。。。。。。
* 第三位不能有4:直接在第三个for中,此题即第三个位置,把a3[x3]中位置是4的情况去掉即可,此时第四位就不会再有4了
*/

public class aa
{
        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循环语句代表一位数
                     
                     int count =0;//记录排列的种数
                     
                 for(int x1 = 0;x1<a1.length;x1++)//用1和下面的每一位组合一次
                 {                        
                         s1 = a1[x1];   //第一位字符
                         for(int x2 = 0;x2<a2.length;x2++)//用2和下面的每一位组合一次
                         {         
                                 if(x1==3 && x2==5){continue;}  //如果第四位和第六位相连,即;3和5相连,那么就不打印,而是进入下一次循环                    
                               
                                 if(x1!=x2) //a1的角标和a2的角标不能相同,即:如果a1[0]==1,那么a2[0]==1时就不组合,以下以此类推
                                 {
                                         s2 = s1+ a2[x2];   //前两位字符就等于第一位+第二位,此处是字符串连接                  
                                         for(int x3 = 0;x3<a3.length;x3++)
                                 {         
                                             if(a3[x3].equals("4")){continue;}  //如果第三位的角标是4,那么也跳过,进入下一次循环
                                             
                                                 if(x2==3 && x3==5){continue;}//如果3和5相连,那么就不打印,进入下一次循环
                                                 
                                         if(x1!=x2 && x1!=x3 && x2!=x3)//a1,a2,a3的角标各不相同才组合
                                         {
                                                 s3 = s2+ a3[x3];//前三位字符就等于第一位+第二位+第三位,此处是字符串连接,以下以此类推                                                         
                                                 for(int x4 = 0;x4<a4.length;x4++)
                                         {                                                                   
                                                         if(x3==3 && x4==5){continue;}//如果3和5相连,那么就不打印,进入下一次循环
                                                 if(x1!=x2 && x1!=x3 && x1!=x4 &&x2!=x3 &&x2!=x4 && x3!=x4 )//a1,a2,a3,a5的角标各不相同才组合
                                                 {
                                                         s4 = s3+ a4[x4];
                                                         for(int x5 = 0;x5<a5.length;x5++)
                                                 {               
                                                                 if(x4==3 && x5==5){continue;}//如果3和5相连,那么就不打印,进入下一次循环
                                                         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(x5==3 && x6==5){continue;}//如果3和5相连,那么就不打印,进入下一次循环
                                                                 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);//此时六位数已经确定,打印咯。。。
                                                                         count++;
                                                                         
                                                                 }                                                                       
                                                         }
                                                                  
                                                         }                                                                       
                                                 }                                                          
                                                          
                                                 }                                                                       
                                         }
                                                  
                                         }                                                                       
                                 }
                                 }   
                                 
                         }
                 }
                 
                 System.out.println("排列方式总共有:"+count+"种");
        
        }
           
}

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

//此题乍一看可能不好看懂,但是你从里面往外剥,不难理解,如下:

/*for(int x1 = 0;x1<a1.length;x1++)//用1和下面的每一位组合一次
{                        
         s1 = a1[x1];   //第一位字符
         for(int x2 = 0;x2<a2.length;x2++)//用2和下面的每一位组合一次
         {         
                 if(x1==3 && x2==5){continue;}  //如果第四位和第六位相连,即;3和5相连,那么就不打印,而是进入下一次循环                    
               
                 if(x1!=x2) //a1的角标和a2的角标不能相同,即:如果a1[0]==1,那么a2[0]==1时就不组合,以下以此类推
                 {
                         s2 = s1+ a2[x2];
                         System.out.println(s2);  //打印2个数的情况
                 }
         }
}
        }
}
*/


个么,求积分啊{:soso_e183:}

评分

参与人数 1技术分 +2 收起 理由
滔哥 + 2 表扬学习精神,奖励2分

查看全部评分

4 个回复

倒序浏览
兄弟还是要加把劲哦~~
你的代码完成不了题目的要求哦,这个题目的正确结果只有198个。
回复 使用道具 举报
韦念欣 发表于 2012-7-21 13:24
兄弟还是要加把劲哦~~
你的代码完成不了题目的要求哦,这个题目的正确结果只有198个。 ...

啊,那我在看看 :'(
回复 使用道具 举报
韦念欣 发表于 2012-7-21 13:24
兄弟还是要加把劲哦~~
你的代码完成不了题目的要求哦,这个题目的正确结果只有198个。 ...

我打印的是3和5不能一起,没有判断5和3,
看着头疼,哎。。。算了

评分

参与人数 1技术分 -1 收起 理由
滔哥 -1 算了?不够坚韧,-1

查看全部评分

回复 使用道具 举报
王飞 发表于 2012-7-21 15:19
我打印的是3和5不能一起,没有判断5和3,
看着头疼,哎。。。算了

个么
:(看了N久头疼啊我。。。。。。:(
总的休息休息吧,但是给了一分的辛苦分我还是知足了,只是付出还是有点回报的,下次我会好好做的 努力。。。:victory:
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马