问题描述
- 算法难题设计出java代码或者伪代码,大牛请进。
- 把 1 2 3 4 5 6 7 8 9 放入三个数组里面 数组可以是空的。。
数组里面的数 是有序的 比如
{1 2 3} { 4 5 6 } { 7 8 9 };{356789},{124},{}
能穷举吗.打印出来
解决方案
{123456789},{},{} 可以么,如果是可以的话,那么是非常简单的
解决方案二:
我是一个刚刚学习编程半年的小白,有点思路,可能不准确,抛砖引玉。
我觉得这个题的实质,是对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应该可以实现。
解决方案三:
不好意思,上面格式弄得不太好,您可以复制在WORD里调下格式,应该会更容易理解
解决方案五:
昨天的思路不对,今天琢磨了一下,换了一种思路,请看下对不对,觉得对或者不对麻烦都回复下。
假设有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();}
}