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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

5黑马币
               以外获得个题,希望得到大家不同的想法~~悬赏可上涨,视解题思路详细是否给币,方法简练思路清晰最高可到15币(评判标准归我想法哦)
         题1:用1、2、3、4这四个数字,用java写一个main函数打印出所有不同的排序,如:1234,1243等要求:“4”不能在第一位,“1”与“3”不能相连
       题2:用1、2、2、3、4、5这六个数字,用java写一个main函数,打印出所有不同的排列,如:512234、412345等,要求:"4"不能在第三位,"3"和"5"不能相连

           请不要放百度粘帖的答案!!!:lol

最佳答案

查看完整内容

楼上的都是牛人,粗看了一眼,我的方法与各位都不一样,如果一样了,纯属巧合。下面是我的代码:

21 个回复

倒序浏览
  1. /*题1:用1、2、3、4这四个数字,用java写一个main函数打印出所有不同的排序,
  2. 如:1234,1243等要求:“4”不能在第一位,“1”与“3”不能相连
  3. 思路:1.肯定要用到for循环和if判断语句
  4.       */
  5. import java.util.*;
  6. class  Test1
  7. {
  8.         public static void main(String[] args)
  9.         {
  10.                 int sum1=0;                     //采用三层嵌套循环,四数之和为10,前面三个数确定,最后一位也可确定。
  11.                 for(int i=1;i<=3;i++)          //“4”不能在第一位,循环里面确定
  12.                 {
  13.                         for(int j=1;j<=4;j++)
  14.                         {
  15.                                 for(int l=1;l<=4;l++)
  16.                                 {
  17.                                         int sum=10-i-j-l;
  18.                                         if((i!=j && j!=l && l!=i)&&            //判断语句条件一,前三个数字不相等
  19.                                                 (i+j)!=4 &&(j+l)!=4&&(l+sum)!=4)    //判断语句条件二,3和1不在一起
  20.                                         {
  21.                                                     sum1=i*1000+j*100+l*10+sum;
  22.                                                 System.out.println(sum1+"");
  23.                                         }
  24.                                 }
  25.                         }

  26.                 }
  27.         }
  28. }
复制代码
楼上的都是牛人,粗看了一眼,我的方法与各位都不一样,如果一样了,纯属巧合。下面是我的代码:
回复 使用道具 举报
两个题的币不重叠,解题方法只要不相同,可重复得币
回复 使用道具 举报
本帖最后由 吐槽星人 于 2015-7-22 19:49 编辑

思路把所有的组合弄出来,我的想法是通过随机数来获取排列,然后进行遍历判断并输出
第一题
  1. package itheima;

  2. import java.util.Random;
  3. import java.util.TreeSet;

  4. /**
  5. * 15、用1、2、3、4这四个数字,用java写一个main函数
  6. *        打印出所有不同的排序,如:1234,1243等
  7. *        要求:“4”不能在第一位,“1”与“3”不能相连
  8. * @author Administrator
  9. *
  10. */
  11. /*
  12. * 思路:利用随机数将不同的组合存入TreeSet。遍历TreeSet将符合条件的组合输出
  13. */
  14. public class Test15 {

  15.         public static void main(String[] args) {
  16.                 //用于换行
  17.                 int count =0;
  18.                 Random random=new Random();
  19.                 //用于记录随机数产生的组合
  20.                 StringBuilder sb=new StringBuilder();
  21.                 TreeSet<String> treeSet=new TreeSet<>();
  22.                 //4个数的排列有24种,A(n,m)=n!/(n-m)!
  23.                 while (treeSet.size()<24) {
  24.                         //通过循环将不同随机数存入字符串缓冲区
  25.                         while (sb.length()<4) {
  26.                                 //产生一个随机数
  27.                                 int num=random.nextInt(4)+1;
  28.                                 count1++;
  29.                                 //如果在字符串中找不到该随机数存入
  30.                                 if (sb.indexOf(""+num)==-1) {
  31.                                         sb.append(""+num);
  32.                                 }
  33.                         }
  34.                         //System.out.println(sb.toString());
  35.                         //将产生的随机数存入TreeSet
  36.                         treeSet.add(sb.toString());
  37.                         //清空缓存区
  38.                         sb.delete(0, sb.length());
  39.                         
  40.                 }
  41.                 //遍历TreeSet,通过条件判断输出组合
  42.                 for (String string : treeSet) {
  43.                         if (!string.startsWith("4")&&!string.contains("13")&&!string.contains("31")) {
  44.                                 count++;
  45.                                 System.out.print(string+"  ");
  46.                                 if (count%7==0) {
  47.                                         System.out.println();
  48.                                 }
  49.                         }
  50.                 }
  51.                 System.out.println(count);
  52.         }

  53.         

  54. }
复制代码
第二题
  1. package itheima;

  2. import java.util.Random;
  3. import java.util.TreeSet;

  4. /**
  5. *  题2:用1、2、2、3、4、5这六个数字,用java写一个main函数,
  6. *  打印出所有不同的排列,如:512234、412345等,
  7. *  要求:"4"不能在第三位,"3"和"5"不能相连
  8. * @author Administrator
  9. *
  10. */
  11. public class Test20 {

  12.         public static void main(String[] args) {
  13.                 //用于换行
  14.                 int count =0;
  15.                 //统计产生了多少个随机数
  16.                 //int count1=0;
  17.                 Random random=new Random();
  18.                 //用于记录随机数产生的组合
  19.                 StringBuilder sb=new StringBuilder();
  20.                 TreeSet<String> treeSet=new TreeSet<>();
  21.                 //这6个数的排列有360种,n!/2
  22.                 while (treeSet.size()<360) {
  23.                         //通过循环将不同随机数存入字符串缓冲区
  24.                         while (sb.length()<6) {
  25.                                 //产生一个随机数
  26.                                 int num=random.nextInt(6)+1;
  27.                                 //count1++;
  28.                                 //如果在字符串中找不到该随机数存入
  29.                                 if (sb.indexOf(""+num)==-1) {
  30.                                         sb.append(""+num);
  31.                                 }
  32.                         }
  33.                         //System.out.println(sb.toString());
  34.                         //将产生的随机数存入TreeSet
  35.                         //for(int i=1;i<6;i++) {
  36.                                 String line =sb.toString();
  37.                                 treeSet.add(line.replace("6",""+2));
  38.                         //}
  39.                         //清空缓存区
  40.                         sb.delete(0, sb.length());
  41.                         
  42.                 }
  43.                 //遍历TreeSet,通过条件判断输出组合
  44.                 for (String string : treeSet) {
  45.                         if ((string.charAt(2)!='4')&&!string.contains("35")&&!string.contains("53")) {
  46.                                 count++;
  47.                                 System.out.print(string+"  ");
  48.                                 if (count%7==0) {
  49.                                         System.out.println();
  50.                                 }
  51.                         }
  52.                 }
  53.                 //System.out.println(count1);
  54.                 System.out.println(count);
  55.         }

  56. }
复制代码




评分

参与人数 1黑马币 +15 收起 理由
linp007 + 15 阁下真是装逼高手,是我输了

查看全部评分

回复 使用道具 举报
吐槽星人 发表于 2015-7-22 17:24
思路把所有的组合弄出来,我的想法是通过随机数来获取排列,然后进行遍历判断并输出
第一题
第二题

哟哟哟,你还要来扣爸爸的币
回复 使用道具 举报
吊吊的,牛人
回复 使用道具 举报

别理他,他是个小逗比,你可以用for嵌套试试,
回复 使用道具 举报
新人求助攻
回复 使用道具 举报

求个鬼的助攻,快把第一题做一下,给你十五币
回复 使用道具 举报
差几个币就阔以申请入学考试了,兄台一个币也是币啊。。
回复 使用道具 举报
午夜码农 发表于 2015-7-22 22:40
差几个币就阔以申请入学考试了,兄台一个币也是币啊。。

做个题就十五,比你回复不来的快?
回复 使用道具 举报
linp007 发表于 2015-7-22 22:04
求个鬼的助攻,快把第一题做一下,给你十五币

我都还没学到
回复 使用道具 举报
/**
    需求:用1、2、3、4这四个数字,用java写一个main函数打印出所有不同的排序,
          如:1234,1243等要求:“4”不能在第一位,“1”与“3”不能相连

        思路:用for嵌套循环便利所有结果,把满足条件的打印出来

*/
class ArrayTest4
{
        public static void main(String[] args)
        {
                char[] ch=new char[]{'1','2','3','4','5'};
                int rem=0;
                for(int te1=0;te1<ch.length;te1++)                        //第一位数字,从数组的第一个字符开始直到最后一个字符
                {
                        for(int te2=0;te2<ch.length;te2++)                //第二位数字,从第一个与ch[te1]不重复的字符开始直到最后一个字符
                        {               
                                if(te2!=te1)
                                {
                                        for(int te3=0;te3<ch.length;te3++)               
                                        {               
                                                if((te3!=te1)&&(te3!=te2))
                                                {
                                                        for(int te4=0;te4<ch.length;te4++)               
                                                        {               
                                                                if((te4!=te1)&&(te4!=te2)&&(te4!=te3))
                                                                {
                                                                        for(int te5=0;te5<ch.length;te5++)               
                                                                        {               
                                                                                if((te5!=te1)&&(te5!=te2)&&(te5!=te3)&&(te5!=te4))
                                                                                {
                                                                                        if((te1!=3)&&!((te1==0&&te2==2)||(te2==0&&te3==2)||(te1==0&&te5==2)))        
                                                                                        {
                                                                                                System.out.print("  "+ch[te1]+ch[te2]+ch[te3]+ch[te4]+ch[te5]);
                                                                                                rem++;
                                                                                                if(rem%5==0)
                                                                                                        System.out.println();
                                                                                        }
                                                                                }
                                                                        }
                                                                }
                                                        }
                                                }
                                        }
                                }
                        }
                }
                System.out.print("\n"+rem);
        }
}
回复 使用道具 举报
/**
    需求:用1、2、3、4这四个数字,用java写一个main函数打印出所有不同的排序,
          如:1234,1243等要求:“4”不能在第一位,“1”与“3”不能相连

        思路:用for嵌套循环便利所有结果,把满足条件的打印出来

*/
class ArrayTest4
{
        public static void main(String[] args)
        {
                char[] ch=new char[]{'1','2','3','4','5'};
                int rem=0;
                for(int te1=0;te1<ch.length;te1++)                        //第一位数字,从数组的第一个字符开始直到最后一个字符
                {
                        for(int te2=0;te2<ch.length;te2++)                //第二位数字,从第一个与ch[te1]不重复的字符开始直到最后一个字符
                        {               
                                if(te2!=te1)
                                {
                                        for(int te3=0;te3<ch.length;te3++)               
                                        {               
                                                if((te3!=te1)&&(te3!=te2))
                                                {
                                                        for(int te4=0;te4<ch.length;te4++)               
                                                        {               
                                                                if((te4!=te1)&&(te4!=te2)&&(te4!=te3))
                                                                {
                                                                        for(int te5=0;te5<ch.length;te5++)               
                                                                        {               
                                                                                if((te5!=te1)&&(te5!=te2)&&(te5!=te3)&&(te5!=te4))
                                                                                {
                                                                                        if((te1!=3)&&!((te1==0&&te2==2)||(te2==0&&te3==2)||(te1==0&&te5==2)))        
                                                                                        {
                                                                                                System.out.print("  "+ch[te1]+ch[te2]+ch[te3]+ch[te4]+ch[te5]);
                                                                                                rem++;
                                                                                                if(rem%5==0)
                                                                                                        System.out.println();
                                                                                        }
                                                                                }
                                                                        }
                                                                }
                                                        }
                                                }
                                        }
                                }
                        }
                }
                System.out.print("\n"+rem);
        }
}

评分

参与人数 1黑马币 +2 收起 理由
linp007 + 2 山寨

查看全部评分

回复 使用道具 举报
别急独角戏 发表于 2015-7-23 23:33
/**
    需求:用1、2、3、4这四个数字,用java写一个main函数打印出所有不同的排序,
          如:1234 ...

复制粘帖也认真点好么,题目你都搞错,你写点思路也好啊
回复 使用道具 举报
本帖最后由 linp007 于 2015-7-24 01:17 编辑

package test.my;

class TestA10C {
        public static void main(String[] args) {
                char[] ch = new char[] { '1', '2', '3', '4' };
                int rem = 0;
                for (int te1 = 0; te1 < ch.length; te1++) // 第一位数字,从数组的第一个字符开始直到最后一个字符
                {
                        for (int te2 = 0; te2 < ch.length; te2++) // 第二位数字,从第一个与ch[te1]不重复的字符开始直到最后一个字符
                        {
                                if (te2 != te1) {
                                        for (int te3 = 0; te3 < ch.length; te3++) {
                                                if ((te3 != te1) && (te3 != te2)) {
                                                        for (int te4 = 0; te4 < ch.length; te4++) {
                                                                if ((te4 != te1) && (te4 != te2)
                                                                                && (te4 != te3)) {
                                                                        if ((te1 != 3)
                                                                                        && !((te1 == 0 && te2 == 2)
                                                                                                        || (te2 == 0 && te1 == 2)
                                                                                                        || (te2 == 0 && te3 == 2)
                                                                                                        || (te3 == 0 && te2 == 2)
                                                                                                        || (te3 == 0 && te4 == 2) || (te4 == 0 && te3 == 2))) {
                                                                                System.out.print("  " + ch[te1]
                                                                                                + ch[te2] + ch[te3] + ch[te4]);
                                                                                rem++;
                                                                                if (rem % 5 == 0)
                                                                                        System.out.println();

                                                                        }
                                                                }
                                                        }
                                                }
                                        }
                                }
                        }
                }
                System.out.print("\n" + rem);
        }
}

回复 使用道具 举报
还可以直接暴力求出所有的组合再判断筛选,还有双向冒泡遍历
回复 使用道具 举报
libin 中级黑马 2015-7-24 08:02:54
18#
  1. /* 题2:用1、2、2、3、4、5这六个数字,用java写一个main函数,打印出所有不同的排列,
  2.   如:512234、412345等,要求:"4"不能在第三位,"3"和"5"不能相连
  3.   如法炮制
  4.   */

  5. class Test2
  6. {
  7.         public static void main(String[] args)
  8.         {
  9.             int sum=0;
  10.             for(int i=1;i<6;i++)
  11.             {
  12.                     for(int j=1;j<6;j++)
  13.                     {
  14.                             for(int l=1;l<6;l++)
  15.                             {
  16.                                     for(int k=1;k<6;k++)
  17.                                     {
  18.                                             for(int n=1;n<6;n++)        //五层循环判断起来更容易些
  19.                                             {
  20.                                                     if(i+j+l+k+n==15&&l!=4 &&   
  21.                                                         (i+j)!=8 && (j+l)!=8 && (l+k)!=8 &&(k+n)!=8)
  22.                                                     {
  23.                                                              sum=i*10000+j*1000+l*100+k*10+n;
  24.                                                             System.out.print(sum+"\t");
  25.                                                     }
  26.                                             }
  27.                                     }
  28.                             }
  29.                     }
  30.             }
  31.         }
  32. }
复制代码


不知正确与否,请各位指正!运行结果如下:
12255   12345   12525   12543   12552   13155   13245   13254   14145   14154
14325   14334   14343   14514   14523   14541   15225   15234   15243   15252
15513   15522   21255   21345   21525   21543   21552   22155   22245   22254
22515   22524   22542   22551   23145   23154   23325   23334   23343   24225
24234   24243   24252   24315   24324   24333   24342   24513   24522   25125
25134   25143   25152   25215   25224   25233   25242   25251   25512   25521
31155   31245   31254   31515   31524   31542   31551   32145   32154   32325
32334   32343   32514   32523   32541   33225   33234   33243   33252   33315
33324   33333   33342   34125   34134   34143   34152   34215   34224   34233
34242   34251   34314   34323   34332   34341   34512   34521   41145   41154
41325   41334   41343   41514   41523   41541   42225   42234   42243   42252
42315   42324   42333   42342   42513   42522   43125   43134   43143   43152
43215   43224   43233   43242   43251   43314   43323   43332   43341   45114
45123   45132   45141   45213   45222   45231   51225   51234   51243   51252
51315   51324   51333   51342   51513   51522   52125   52134   52143   52152
52215   52224   52233   52242   52251   52314   52323   52332   52341   52512
52521   54114   54123   54132   54141   54213   54222   54231   54312   54321
55113   55122   55131   55212   55221

点评

思路很好,第二题的题目意思可能有点混乱,应该是首先包含1-5的5个数,然后中间再有其中任意一个数  发表于 2015-7-24 08:28

评分

参与人数 1黑马币 +6 收起 理由
linp007 + 6 赞一个!

查看全部评分

回复 使用道具 举报
/*题1:用1、2、3、4这四个数字,用java写一个main函数打印出所有不同的排序,

如:1234,1243等要求:“4”不能在第一位,“1”与“3”不能相连

思路:1.肯定要用到for循环和if判断语句

      */

import java.util.*;

class  Test1

{

        public static void main(String[] args)

        {

                int sum1=0;                     //采用三层嵌套循环,四数之和为10,前面三个数确定,最后一位也可确定。

                for(int i=1;i<=3;i++)          //“4”不能在第一位,循环里面确定

                {

                        for(int j=1;j<=4;j++)

                        {

                                for(int l=1;l<=4;l++)

                                {

                                        int sum=10-i-j-l;

                                        if((i!=j && j!=l && l!=i)&&            //判断语句条件一,前三个数字不相等

                                                (i+j)!=4 &&(j+l)!=4&&(l+sum)!=4)    //判断语句条件二,3和1不在一起

                                        {

                                                    sum1=i*1000+j*100+l*10+sum;

                                                System.out.println(sum1+"");

                                        }

                                }

                        }



                }

        }

}
回复 使用道具 举报
linp007 发表于 2015-7-24 01:11
复制粘帖也认真点好么,题目你都搞错,你写点思路也好啊

这是我自己敲的,我是刚到黑马学习的基础班学生,我自己想了一个多小时,换来的就是这个。我不会把代码发到贴吧里,只能从EditePlus里面直接粘贴出来。没想到得到的却是这种回复,不过没关系,代码是我自己写的我自己知道,我不会因为这点误解就放弃的
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马