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 验证了一下,想法有问题,会继续琢磨一下
大约 2 年之前 回复
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币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
第九章--伪代码编程过程
第九章--伪代码编程过程 9.1 创建类和子程序的步骤概述 1. 创建一个类的步骤(是个迭代过程): (1)创建类的总体设计。 (2)创建类中得子程序。 (3)复审并测试整个类。 2. 创建子程序的步骤(是个迭代的过程): (1)设计子程序 (2)检查设计 (3)编写子程序代码 (4)复审并测试代码 9.2 伪代码 1.下面是一些有效使用伪代码的指导原则
算法8.分治算法计算a^n
设a为一给定实数,设计一个分治算法,用于计算an (n为自然数),并分析其计算时间复杂度,要求该算法的计算效率高于蛮力算法。 1. 算法设计思路 1.当n为偶数的时候,an可以分治为(a^2/n)*(a^2/n) 2.当n为奇数的时候,an可以分治为(a^2/n)*(a^2/n)*a 3.当n=1,a^n=a; 4.当n=0,a^n=1; 算法实现的伪代码 功能描述
用Java利用prim算法实现最小生成树
标题: 最小生成树 时 限: 1000 ms 内存限制: 10000 K 总时限: 3000 ms 描述: 有一张城市地图,图中的顶点为城市,无向边代表两个城市间的连通关系,边上的权为在这两个城市之间修建高速公路的造价,研究后发现,这个地图有一个特点,即任一对城市都是连通的。现在的问题是,要修建若干高速公路把所有城市联系起来,问如何设计可使得工程的总造价最少。假定所有输入的根节点或者源为第一个城市或第一组数据。 请使用prim算法求解。 输入: n(城市数,1<=n<=100); e(边数); 以下e行,每行3个数i,j,wij,表示在城市i,j之间修建高速公路的造价。 输出: n-1行,每行为两个城市的序号,表明这两个城市间建一条高速公路。 输入样例: 5 8 1 2 2 1 3 12 1 4 10 2 3 8 2 5 9 3 4 6 3 5 3 4 5 7 输出样例: 1 2 2 3 3 5 3 4
算法(伪代码)
nngk QuickSort(A[l,r]) if l s = Partition(A[l,r]) Quicksort(A[l, s-1]) Quicksort(A[s+1, r]) Partition(A[l,r]) p = A[l] i=l j=r+1 repeat repeat ++i until A[i]>=p repeat --j until A[j] s
dd大牛的背包九讲-背包问题汇总
背包九讲 目录  第一讲 01背包问题  第二讲 完全背包问题  第三讲 多重背包问题  第四讲 混合三种背包问题  第五讲 二维费用的背包问题  第六讲 分组的背包问题  第七讲 有依赖的背包问题  第八讲 泛化物品  第九讲 背包问题问法的变化  附:USACO中的背包问题  前言 本篇文章是我(dd_engi)正在进行中的一个雄心勃勃
详细设计的伪代码的实例
代码(Pseudocode)是一种算法描述语言。使用伪代码的目的是为了使被描述的算法可以容易地以任何一种编程语言(Pascal,C,Java,etc)实现。因此,伪代码必须结构清晰、代码简单、可读性好,并且类似自然语言。 介于自然语言与编程语言之间。  它以编程语言的书写形式指明算法的职能。相比于程序语言(例如Java, C++,C, Dephi 等等)它更类似自然语言。它是半角式化、不标准的语言
数据结构之图论算法伪代码(伪代码是一种思想可对照伪代码的实用代码学习算法设计)
/*简单的拓扑排序伪代码*/ void Graph::topsort() {   for( int counter = 0; counter    {        vertex v = findNewVertexOfIndegreeZero();         if( v == NOT_A_VERTEX )               throw CycleFoundExcept
MapReduce 算法设计-Local Aggregation
MapReduce 算法设计-Local Aggregation本文主要内容来自由马里兰大学的Jimmy Lin 和 Chris Dyer写的《Data-Intensive Text Processing with MapReduce》一书中的第三章,如有错误,欢迎指正。 更新说明:我发现已经有很多人翻译过这本书的该部分内容,因而以后的博客会更关注程序实现以及实验部分,理论部分会给出其他博客的参考
成为Java大牛的25个要素!!!
人人都想当大牛,哪有那么简单?不经历一番艰苦的磨练以及个人的不懈追求,怎么可能才技术上取得长远的进步。当然,努力是一方面,方向是另一方面。想要成为Java大牛,你需要在这25点上做出努力。 1. 你需要精通面向对象分析与设计(OOA/OOD)、涉及模式(GOF,J2EEDP)以及综合模式。你应该了解UML,尤其是class、object、interaction以及statediagrams.
A*算法,伪代码,源码
转载自博主 GottaYiWanLiu[点击查看原文](http://blog.csdn.net/gottayiwanliu/article/details/54881256) A*   AStar   A星 2d游戏,或者网格游戏中 Cost f 总消耗 Cost g 距离起点的消耗 Cost h 距离终点的消耗 默认消耗,直走消耗10,斜着走消耗14开启列表 关闭列表父节点 // 开启列表 关闭