本帖最后由 吐槽星人 于 2015-7-22 19:49 编辑
思路把所有的组合弄出来,我的想法是通过随机数来获取排列,然后进行遍历判断并输出
第一题
- package itheima;
- import java.util.Random;
- import java.util.TreeSet;
- /**
- * 15、用1、2、3、4这四个数字,用java写一个main函数
- * 打印出所有不同的排序,如:1234,1243等
- * 要求:“4”不能在第一位,“1”与“3”不能相连
- * @author Administrator
- *
- */
- /*
- * 思路:利用随机数将不同的组合存入TreeSet。遍历TreeSet将符合条件的组合输出
- */
- public class Test15 {
- public static void main(String[] args) {
- //用于换行
- int count =0;
- Random random=new Random();
- //用于记录随机数产生的组合
- StringBuilder sb=new StringBuilder();
- TreeSet<String> treeSet=new TreeSet<>();
- //4个数的排列有24种,A(n,m)=n!/(n-m)!
- while (treeSet.size()<24) {
- //通过循环将不同随机数存入字符串缓冲区
- while (sb.length()<4) {
- //产生一个随机数
- int num=random.nextInt(4)+1;
- count1++;
- //如果在字符串中找不到该随机数存入
- if (sb.indexOf(""+num)==-1) {
- sb.append(""+num);
- }
- }
- //System.out.println(sb.toString());
- //将产生的随机数存入TreeSet
- treeSet.add(sb.toString());
- //清空缓存区
- sb.delete(0, sb.length());
-
- }
- //遍历TreeSet,通过条件判断输出组合
- for (String string : treeSet) {
- if (!string.startsWith("4")&&!string.contains("13")&&!string.contains("31")) {
- count++;
- System.out.print(string+" ");
- if (count%7==0) {
- System.out.println();
- }
- }
- }
- System.out.println(count);
- }
-
- }
复制代码 第二题
- package itheima;
- import java.util.Random;
- import java.util.TreeSet;
- /**
- * 题2:用1、2、2、3、4、5这六个数字,用java写一个main函数,
- * 打印出所有不同的排列,如:512234、412345等,
- * 要求:"4"不能在第三位,"3"和"5"不能相连
- * @author Administrator
- *
- */
- public class Test20 {
- public static void main(String[] args) {
- //用于换行
- int count =0;
- //统计产生了多少个随机数
- //int count1=0;
- Random random=new Random();
- //用于记录随机数产生的组合
- StringBuilder sb=new StringBuilder();
- TreeSet<String> treeSet=new TreeSet<>();
- //这6个数的排列有360种,n!/2
- while (treeSet.size()<360) {
- //通过循环将不同随机数存入字符串缓冲区
- while (sb.length()<6) {
- //产生一个随机数
- int num=random.nextInt(6)+1;
- //count1++;
- //如果在字符串中找不到该随机数存入
- if (sb.indexOf(""+num)==-1) {
- sb.append(""+num);
- }
- }
- //System.out.println(sb.toString());
- //将产生的随机数存入TreeSet
- //for(int i=1;i<6;i++) {
- String line =sb.toString();
- treeSet.add(line.replace("6",""+2));
- //}
- //清空缓存区
- sb.delete(0, sb.length());
-
- }
- //遍历TreeSet,通过条件判断输出组合
- for (String string : treeSet) {
- if ((string.charAt(2)!='4')&&!string.contains("35")&&!string.contains("53")) {
- count++;
- System.out.print(string+" ");
- if (count%7==0) {
- System.out.println();
- }
- }
- }
- //System.out.println(count1);
- System.out.println(count);
- }
- }
复制代码
|