2 angye angye 于 2016.04.22 11:46 提问

算法难题设计出java代码或者伪代码,大牛请进。

把 1 2 3 4 5 6 7 8 9 放入三个数组里面 数组可以是空的。。

数组里面的数 是有序的 比如
{1 2 3} { 4 5 6 } { 7 8 9 };{356789},{124},{}
能穷举吗.打印出来

6个回答

u014201191
u014201191   2016.04.22 12:05

{123456789},{},{} 可以么,如果是可以的话,那么是非常简单的

erichk2008
erichk2008   2016.04.22 14:45

我是一个刚刚学习编程半年的小白,有点思路,可能不准确,抛砖引玉。
我觉得这个题的实质,是对1 2 3 4 5 6 7 8 9进行切割,一共切割3次,然后将切割后的段放到3个集合里,少于3段用空集合补,具体有以下几种情况:

切几个地方                          切的具体位置                    切出来的结果

3刀切在1个地方 1.切在头或尾巴: 1段数字,2段空白 (例: /123456789)
2. 切在中间 2段数字,1段空白 (例: 1234/56789)
3刀切在2个地方 1. 1头1尾 1段数字,2段空白 (例:/123456789/)
2. 1头1中(或1尾1中) 2段数字,1段空白 (例:/123/456789 或12345/6789/)
3. 2中 3段数字,0段空白 (例:123/45678/9)
3刀切在3个地方 1. 1头1尾1中 2段数字,1段空白 (例:/12345/6789/)
2. 1头2中(或1尾2中) 3段数字,0段空白 (例:/123/456/789 或12/345/6789/)
3. 3中 4段数字,0段空白 (例:123/45/678/9)
针对最后一种情况,要对这4段进行多次组合,组合成3段,比如{45}、{678}、{1239},

以上几种情况之中有重复的情况,水平有限,感觉整体上应该可以覆盖所有可能性,代码用JAVA应该可以实现。

erichk2008
erichk2008   2016.04.22 14:47

不好意思,上面格式弄得不太好,您可以复制在WORD里调下格式,应该会更容易理解

erichk2008
erichk2008   2016.04.22 14:54

图片说明

erichk2008
erichk2008 验证了一下,想法有问题,会继续琢磨一下
一年多之前 回复
erichk2008
erichk2008   2016.04.23 17:34

昨天的思路不对,今天琢磨了一下,换了一种思路,请看下对不对,觉得对或者不对麻烦都回复下。

假设有9小球,小球上的号码分别是1-9,要分别放进3个篮子,可以放在同一个篮子里,也可以放在不同的篮子里,不考虑小球放入篮子的次序问题;
3个篮子分别是篮子1,篮子2,篮子3,在每种情况下,每个小球只能出现在3个篮子的其中一个,
创建9个int 参数 num1-num9,每个代表1个小球,其值代表所在的篮子,比如说当num1=1时,意思是1号小球在1号篮子里;
然后写了9个嵌套的for循环,当全部等于1时,代表9个球都在篮子1里,当num9=2,其他num=1时,代表1-8号小球在1号篮子里,9号小球在2号篮子里;
以此类推,最后是19683种情况,每种情况都保存在了list集合中,遍历打印即可。
我在下面的代码里加入了打印结果的代码。

import java.util.ArrayList;
import java.util.List;

public class TestArray {
public static List list = new ArrayList();// 保存所有的数组结果,用String代表每个数组里的值
static int num1 = 1;
static int num2 = 1;
static int num3 = 1;
static int num4 = 1;
static int num5 = 1;
static int num6 = 1;
static int num7 = 1;
static int num8 = 1;
static int num9 = 1;
static int caseNum = 1;

// 嵌套循环,num的取值为1-3,代表其在第几个数组里
public static void main(String[] args) {
    for (num1 = 1; num1 <= 3; num1++) {
        for (num2 = 1; num2 <= 3; num2++) {
            for (num3 = 1; num3 <= 3; num3++) {
                for (num4 = 1; num4 <= 3; num4++) {
                    for (num5 = 1; num5 <= 3; num5++) {
                        for (num6 = 1; num6 <= 3; num6++) {
                            for (num7 = 1; num7 <= 3; num7++) {
                                for (num8 = 1; num8 <= 3; num8++) {
                                    for (num9 = 1; num9 <= 3; num9++) {
                                        addToList();
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
    System.out.println(list.size());
}

// 保存对应结果的方法,分别判断num1-num9的值,放进对应的数组里(用String表示),然后把3个数组(用String表示)放进list里保存
public static void addToList() {
    Integer[] arrays = new Integer[] { num1, num2, num3, num4, num5, num6, num7, num8, num9 };
    String array1 = "";
    String array2 = "";
    String array3 = "";
    for (int i = 0; i < arrays.length; i++) {
        switch (arrays[i]) {
        case 1:
            array1 += i + 1;
            break;
        case 2:
            array2 += i + 1;
            break;
        case 3:
            array3 += i + 1;
            break;
        }
    }
    String[] stringArray = new String[] { array1, array2, array3 };
    list.add(stringArray);
    System.out.print("case" + caseNum++ + "===" + "set1=" + array1 + ",set2=" + array2 + ",set3=" + array3);
    System.out.println();
}

}

shao941122
shao941122   2016.10.18 16:30

初始化3个数组。加入集合list.
for(int i = 0;i<9;i++){
int index = 生成0 1 2的随机函数;
将当前数字,加入随机数指定的数组内。
}

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!