1.
/* * 对于一个正整数n而言,它的一个分割,就是把n写成若干个正整数的和,但不计较书写的顺序,请写一个程序,输入n,把n的所有分割显示出来~ */ public static void print1(int n) { if (n > 0) { List<String> list = new ArrayList<String>(); for (int i = 1; i <= n / 2; i++) { f(n - i, i, "+" + i, list); } int len = list.size(); System.out.println(n + "共" + len + "个表达式:"); for (int i = 0; i < len; i++) { System.out.println(n + "=" + list.get(i)); } } } private static void f(int n, int flag, String str, List<String> list) { if (n == flag) { list.add(n + str); } else { list.add(n + str); str += "+1"; f(n - 1, flag, str, list); } } public static void main(String[] args) { T3.print1(5); T3.print1(10); T3.print1(20); }
输出:
5共6个表达式: 5=4+1 5=3+1+1 5=2+1+1+1 5=1+1+1+1+1 5=3+2 5=2+2+1 10共25个表达式: 10=9+1 10=8+1+1 10=7+1+1+1 10=6+1+1+1+1 10=5+1+1+1+1+1 10=4+1+1+1+1+1+1 10=3+1+1+1+1+1+1+1 10=2+1+1+1+1+1+1+1+1 10=1+1+1+1+1+1+1+1+1+1 10=8+2 10=7+2+1 10=6+2+1+1 10=5+2+1+1+1 10=4+2+1+1+1+1 10=3+2+1+1+1+1+1 10=2+2+1+1+1+1+1+1 10=7+3 10=6+3+1 10=5+3+1+1 10=4+3+1+1+1 10=3+3+1+1+1+1 10=6+4 10=5+4+1 10=4+4+1+1 10=5+5 20共100个表达式: 20=19+1 20=18+1+1 20=17+1+1+1 20=16+1+1+1+1 20=15+1+1+1+1+1 20=14+1+1+1+1+1+1 20=13+1+1+1+1+1+1+1 20=12+1+1+1+1+1+1+1+1 20=11+1+1+1+1+1+1+1+1+1 20=10+1+1+1+1+1+1+1+1+1+1 20=9+1+1+1+1+1+1+1+1+1+1+1 20=8+1+1+1+1+1+1+1+1+1+1+1+1 20=7+1+1+1+1+1+1+1+1+1+1+1+1+1 20=6+1+1+1+1+1+1+1+1+1+1+1+1+1+1 20=5+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1 20=4+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1 20=3+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1 20=2+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1 20=1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1 20=18+2 20=17+2+1 20=16+2+1+1 20=15+2+1+1+1 20=14+2+1+1+1+1 20=13+2+1+1+1+1+1 20=12+2+1+1+1+1+1+1 20=11+2+1+1+1+1+1+1+1 20=10+2+1+1+1+1+1+1+1+1 20=9+2+1+1+1+1+1+1+1+1+1 20=8+2+1+1+1+1+1+1+1+1+1+1 20=7+2+1+1+1+1+1+1+1+1+1+1+1 20=6+2+1+1+1+1+1+1+1+1+1+1+1+1 20=5+2+1+1+1+1+1+1+1+1+1+1+1+1+1 20=4+2+1+1+1+1+1+1+1+1+1+1+1+1+1+1 20=3+2+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1 20=2+2+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1 20=17+3 20=16+3+1 20=15+3+1+1 20=14+3+1+1+1 20=13+3+1+1+1+1 20=12+3+1+1+1+1+1 20=11+3+1+1+1+1+1+1 20=10+3+1+1+1+1+1+1+1 20=9+3+1+1+1+1+1+1+1+1 20=8+3+1+1+1+1+1+1+1+1+1 20=7+3+1+1+1+1+1+1+1+1+1+1 20=6+3+1+1+1+1+1+1+1+1+1+1+1 20=5+3+1+1+1+1+1+1+1+1+1+1+1+1 20=4+3+1+1+1+1+1+1+1+1+1+1+1+1+1 20=3+3+1+1+1+1+1+1+1+1+1+1+1+1+1+1 20=16+4 20=15+4+1 20=14+4+1+1 20=13+4+1+1+1 20=12+4+1+1+1+1 20=11+4+1+1+1+1+1 20=10+4+1+1+1+1+1+1 20=9+4+1+1+1+1+1+1+1 20=8+4+1+1+1+1+1+1+1+1 20=7+4+1+1+1+1+1+1+1+1+1 20=6+4+1+1+1+1+1+1+1+1+1+1 20=5+4+1+1+1+1+1+1+1+1+1+1+1 20=4+4+1+1+1+1+1+1+1+1+1+1+1+1 20=15+5 20=14+5+1 20=13+5+1+1 20=12+5+1+1+1 20=11+5+1+1+1+1 20=10+5+1+1+1+1+1 20=9+5+1+1+1+1+1+1 20=8+5+1+1+1+1+1+1+1 20=7+5+1+1+1+1+1+1+1+1 20=6+5+1+1+1+1+1+1+1+1+1 20=5+5+1+1+1+1+1+1+1+1+1+1 20=14+6 20=13+6+1 20=12+6+1+1 20=11+6+1+1+1 20=10+6+1+1+1+1 20=9+6+1+1+1+1+1 20=8+6+1+1+1+1+1+1 20=7+6+1+1+1+1+1+1+1 20=6+6+1+1+1+1+1+1+1+1 20=13+7 20=12+7+1 20=11+7+1+1 20=10+7+1+1+1 20=9+7+1+1+1+1 20=8+7+1+1+1+1+1 20=7+7+1+1+1+1+1+1 20=12+8 20=11+8+1 20=10+8+1+1 20=9+8+1+1+1 20=8+8+1+1+1+1 20=11+9 20=10+9+1 20=9+9+1+1 20=10+10
2.
下面两个方法都不满足第三条(只能做一次测试)
也可以先计算B、W、R的个数,确定b,w,r下标从何处开始,这样W的下标w不必从中间开始
// 假设有一个数组,它有n个元素,每一个不外乎是红、白、蓝3中颜色之一的代号,就用R、W、B代表。 // 这些元素在数组中并没有依同样颜色的元素排在一起的方式来排列, // 请写一个程序把这个元素排成所有蓝色在前,接着是白色,最后是红色的排列方式, // 不过在写程序时要满足下面的条件: // 1. 不能用额外的内存,换句话说,只能在数组之内用互换的方式完成 // 2. 互换两个元素的动作要越少越好 // 3. 对于每一个元素而言,测试它是红、白还是蓝的工作每种颜色最多只能做一次测试 // 在这个条件下,写一个最快的程序。 public static void print2(String[] arr) { System.out.println("源数组:" + Arrays.toString(arr)); int len = arr.length; int b = 0; int w = len % 2 == 0 ? len / 2 - 1 : len / 2; int r = len - 1; int wLen = 1; int count = 0; while (count < len) { if (arr[b].equals("B")) { b++; count++; } else if (arr[b].equals("R")) { if (arr[r].equals("B")) { swap(arr, b, r); b++; r--; count += 2; } else if (arr[r].equals("R")) { r--; count++; } else { if (arr[w].equals("W")) { w += wLen; wLen = wLen(wLen); count++; } else if (arr[w].equals("R")) { swap(arr, w, r); r--; w += wLen; wLen = wLen(wLen); count += 2; } else { swap(arr, b, w, r); b++; r--; w += wLen; wLen = wLen(wLen); count += 3; } } } else { if (arr[w].equals("B")) { swap(arr, b, w); b++; w += wLen; wLen = wLen(wLen); count += 2; } else if (arr[w].equals("W")) { w += wLen; wLen = wLen(wLen); count++; } else { if (arr[r].equals("R")) { r--; count++; } else if (arr[r].equals("W")) { swap(arr, w, r); r--; w += wLen; wLen = wLen(wLen); count += 2; } else { swap(arr, b, w, r); b++; r--; w += wLen; wLen = wLen(wLen); count += 3; } } } if (count >= len) { break; } if (arr[r].equals("R")) { r--; count++; } else if (arr[r].equals("B")) { if (arr[b].equals("R")) { swap(arr, b, r); b++; r--; count += 2; } else if (arr[b].equals("B")) { b++; count++; } else { if (arr[w].equals("W")) { w += wLen; wLen = wLen(wLen); count++; } else if (arr[w].equals("B")) { swap(arr, b, w); b++; w += wLen; wLen = wLen(wLen); count += 2; } else { swap(arr, b, w, r); b++; r--; w += wLen; wLen = wLen(wLen); count += 3; } } } else { if (arr[w].equals("R")) { swap(arr, w, r); r--; w += wLen; wLen = wLen(wLen); count += 2; } else if (arr[w].equals("W")) { w += wLen; wLen = wLen(wLen); count++; } else { if (arr[b].equals("B")) { b++; count++; } else if (arr[b].equals("W")) { swap(arr, b, w); b++; w += wLen; wLen = wLen(wLen); count += 2; } else { swap(arr, b, w, r); b++; r--; w += wLen; wLen = wLen(wLen); count += 3; } } } if (count >= len) { break; } if (arr[w].equals("W")) { w += wLen; wLen = wLen(wLen); count++; } else if (arr[w].equals("B")) { if (arr[b].equals("W")) { swap(arr, b, w); b++; w += wLen; wLen = wLen(wLen); count += 2; } else if (arr[b].equals("B")) { b++; count++; } else { if (arr[r].equals("R")) { r--; count++; } else if (arr[r].equals("B")) { swap(arr, b, r); b++; r--; count += 2; } else { swap(arr, b, w, r); b++; r--; w += wLen; wLen = wLen(wLen); count += 3; } } } else { if (arr[r].equals("W")) { swap(arr, w, r); r--; w += wLen; wLen = wLen(wLen); count += 2; } else if (arr[r].equals("R")) { r--; count++; } else { if (arr[b].equals("B")) { b++; count++; } else if (arr[b].equals("R")) { swap(arr, b, r); b++; r--; count += 2; } else { swap(arr, b, w, r); b++; r--; w += wLen; wLen = wLen(wLen); count += 3; } } } } System.out.println("排列后数组:" + Arrays.toString(arr) + ",b=" + b + ",w=" + w + ",r=" + r); } public static void print3(String[] arr) { System.out.println("源数组:" + Arrays.toString(arr)); int len = arr.length; int b = 0; int w = len % 2 == 0 ? len / 2 - 1 : len / 2; int r = len - 1; int wLen = 1; int count = 0; while (count < len) { while (count < len && arr[b].equals("B")) { b++; count++; } while (count < len && arr[r].equals("R")) { r--; count++; } while (count < len && arr[w].equals("W")) { w += wLen; wLen = wLen(wLen); count++; } if (count >= len) { break; } if (arr[b].equals("R")) { if (arr[r].equals("B")) { swap(arr, b, r); b++; r--; count += 2; } } else { if (arr[w].equals("B")) { swap(arr, b, w); b++; w += wLen; wLen = wLen(wLen); count += 2; } } if (count >= len) { break; } if (arr[r].equals("B")) { if (arr[b].equals("R")) { swap(arr, b, r); b++; r--; count += 2; } } else { if (arr[w].equals("R")) { swap(arr, r, w); r--; w += wLen; wLen = wLen(wLen); count += 2; } } if (count >= len) { break; } if (arr[w].equals("B")) { if (arr[b].equals("W")) { swap(arr, b, w); b++; w += wLen; wLen = wLen(wLen); count += 2; } } else { if (arr[r].equals("W")) { swap(arr, r, w); r--; w += wLen; wLen = wLen(wLen); count += 2; } } if (count >= len) { break; } if (arr[b].equals("R") && arr[w].equals("B") && arr[r].equals("W")) { String temp = arr[b]; arr[b] = arr[w]; arr[w] = arr[r]; arr[r] = temp; b++; r--; w += wLen; wLen = wLen(wLen); count += 3; } if (arr[b].equals("W") && arr[w].equals("R") && arr[r].equals("B")) { String temp = arr[b]; arr[b] = arr[r]; arr[r] = arr[w]; arr[w] = temp; b++; r--; w += wLen; wLen = wLen(wLen); count += 3; } } System.out.println("排列后数组:" + Arrays.toString(arr) + ",b=" + b + ",w=" + w + ",r=" + r); } private static void swap(String[] arr, int m, int n) { String temp = arr[m]; arr[m] = arr[n]; arr[n] = temp; } private static void swap(String[] arr, int b, int w, int r) { if (arr[b].equals("R") && arr[w].equals("B") && arr[r].equals("W")) { String temp = arr[b]; arr[b] = arr[w]; arr[w] = arr[r]; arr[r] = temp; } else { String temp = arr[b]; arr[b] = arr[r]; arr[r] = arr[w]; arr[w] = temp; } } private static int wLen(int wLen) { if (wLen > 0) { wLen++; } else { wLen--; } return -wLen; } public static void main(String[] args) { String[] arr = { "B", "W", "R" }; String[] arr2 = { "R", "W", "B" }; String[] arr3 = { "R", "B", "W" }; String[] arr4 = { "W", "B", "R" }; String[] arr5 = { "B", "R", "W" }; String[] arr6 = { "W", "R", "B" }; String[] arr7 = { "R", "W", "R", "B", "R", "W", "B", "B" }; String[] arr8 = { "R", "B", "W", "W", "R", "B", "W", "R", "B", "W", "R", "W" }; String[] arr9 = { "B", "W", "B", "R" }; String[] arr10 = { "B", "B", "B" }; String[] arr11 = { "R", "R", "R" }; String[] arr12 = { "W", "W", "W" }; System.out.println("b/w/r为当前下标位置\n---------------------------"); T3.print2(arr9.clone()); System.out.println("---------------------------"); T3.print3(arr9.clone()); System.out.println("---------------------------"); T3.print2(arr10.clone()); System.out.println("---------------------------"); T3.print3(arr10.clone()); System.out.println("---------------------------"); T3.print2(arr11.clone()); System.out.println("---------------------------"); T3.print3(arr11.clone()); System.out.println("---------------------------"); T3.print2(arr12.clone()); System.out.println("---------------------------"); T3.print3(arr12.clone()); System.out.println("---------------------------"); T3.print2(arr.clone()); System.out.println("---------------------------"); T3.print2(arr2.clone()); System.out.println("---------------------------"); T3.print2(arr3.clone()); System.out.println("---------------------------"); T3.print2(arr4.clone()); System.out.println("---------------------------"); T3.print2(arr5.clone()); System.out.println("---------------------------"); T3.print2(arr6.clone()); System.out.println("---------------------------"); T3.print2(arr7.clone()); System.out.println("---------------------------"); T3.print2(arr8.clone()); System.out .println("===================================================="); T3.print3(arr.clone()); System.out.println("---------------------------"); T3.print3(arr2.clone()); System.out.println("---------------------------"); T3.print3(arr3.clone()); System.out.println("---------------------------"); T3.print3(arr4.clone()); System.out.println("---------------------------"); T3.print3(arr5.clone()); System.out.println("---------------------------"); T3.print3(arr6.clone()); System.out.println("---------------------------"); T3.print3(arr7.clone()); System.out.println("---------------------------"); T3.print3(arr8.clone()); System.out.println("---------------------------"); }
输出:
b/w/r为当前下标位置 --------------------------- 源数组:[B, W, B, R] 排列后数组:[B, B, W, R],b=2,w=0,r=2 --------------------------- 源数组:[B, W, B, R] 排列后数组:[B, B, W, R],b=2,w=0,r=2 --------------------------- 源数组:[B, B, B] 排列后数组:[B, B, B],b=3,w=1,r=2 --------------------------- 源数组:[B, B, B] 排列后数组:[B, B, B],b=3,w=1,r=2 --------------------------- 源数组:[R, R, R] 排列后数组:[R, R, R],b=0,w=1,r=-1 --------------------------- 源数组:[R, R, R] 排列后数组:[R, R, R],b=0,w=1,r=-1 --------------------------- 源数组:[W, W, W] 排列后数组:[W, W, W],b=0,w=3,r=2 --------------------------- 源数组:[W, W, W] 排列后数组:[W, W, W],b=0,w=3,r=2 --------------------------- 源数组:[B, W, R] 排列后数组:[B, W, R],b=1,w=2,r=1 --------------------------- 源数组:[R, W, B] 排列后数组:[B, W, R],b=1,w=2,r=1 --------------------------- 源数组:[R, B, W] 排列后数组:[B, W, R],b=1,w=2,r=1 --------------------------- 源数组:[W, B, R] 排列后数组:[B, W, R],b=1,w=2,r=1 --------------------------- 源数组:[B, R, W] 排列后数组:[B, W, R],b=1,w=2,r=1 --------------------------- 源数组:[W, R, B] 排列后数组:[B, W, R],b=1,w=2,r=1 --------------------------- 源数组:[R, W, R, B, R, W, B, B] 排列后数组:[B, B, B, W, W, R, R, R],b=3,w=2,r=4 --------------------------- 源数组:[R, B, W, W, R, B, W, R, B, W, R, W] 排列后数组:[B, B, B, W, W, W, W, W, R, R, R, R],b=3,w=8,r=7 ==================================================== 源数组:[B, W, R] 排列后数组:[B, W, R],b=1,w=2,r=1 --------------------------- 源数组:[R, W, B] 排列后数组:[B, W, R],b=1,w=2,r=1 --------------------------- 源数组:[R, B, W] 排列后数组:[B, W, R],b=1,w=2,r=1 --------------------------- 源数组:[W, B, R] 排列后数组:[B, W, R],b=1,w=2,r=1 --------------------------- 源数组:[B, R, W] 排列后数组:[B, W, R],b=1,w=2,r=1 --------------------------- 源数组:[W, R, B] 排列后数组:[B, W, R],b=1,w=2,r=1 --------------------------- 源数组:[R, W, R, B, R, W, B, B] 排列后数组:[B, B, B, W, W, R, R, R],b=3,w=2,r=4 --------------------------- 源数组:[R, B, W, W, R, B, W, R, B, W, R, W] 排列后数组:[B, B, B, W, W, W, W, W, R, R, R, R],b=3,w=8,r=7 ---------------------------
相关推荐
### log4j乱码问题解决办法 #### 一、引言 在开发过程中,日志记录是必不可少的一个环节。良好的日志系统可以帮助开发者快速定位问题并进行调试。Log4j作为一款广泛使用的Java日志框架,在很多项目中扮演着重要...
给定两个水壶,一个可以装4升水,一个能装3升水,水壶上没有...分啤酒问题:现有8升、5升、3升的容器各一个,均无任何度量标记,其中8升的容器装满啤酒,其他两个为空。要求用上述容器倒来倒去,分成两份4升的啤酒。
在本文中,我们只讨论了 TIA PORTAL V15 安装 UPD4 时出现的问题和解决方案,但是实际上,TIA PORTAL V15 还有许多其他功能和应用,例如数据采集、监控和控制等。用户可以继续学习和探索 TIA PORTAL V15 的其他功能...
问题的求解方法,就是从给定的初始状态出发,不断地将空格上下左右的数码移至空格,将一个状态转化成其它状态,直到产生目标状态。 本报告利用A*算法,给出了15数码问题的C++算法实现。 A*算法是一种预测算法,主要...
4. 混合三种背包问题:这是将01背包问题、完全背包问题以及多重背包问题结合在一起形成的更复杂的问题。解决这类问题需要综合应用不同背包问题的解题策略。 5. 二维费用的背包问题:在传统背包问题中,物品的价值和...
以4皇后为例,其他的N皇后问题以此类推。所谓4皇后问题就是求解如何在4×4的棋盘上无冲突的摆放4个皇后棋子。在国际象棋中,皇后的移动方式为横竖交叉的,因此在任意一个皇后所在位置的水平、竖直、以及45度斜线上都...
在计算机科学和信息技术领域中,单源最短路径问题是指从一个源点到其他顶点的最短路径问题。它是一种典型的图论问题,广泛应用于交通网络、通信网络、计算机网络等领域。贪心算法是解决单源最短路径问题的一种常用...
4. 其他可能的优化算法:遗传算法、模拟退火、粒子群优化。 5. Matlab在优化问题求解中的应用和优势。 以上内容详尽介绍了背包问题在Matlab中的求解方法,对于理解和实践这类问题具有很高的参考价值。
4. **部署策略**:为了确保在其他客户端上能够顺利运行,你需要执行以下操作: - 确保目标系统已经安装了所有必要的运行时库,如Microsoft Data Access Components (MDAC) 2.8或更高版本。 - 分发KB983246补丁,...
3. 80/20 和其他一些重要规则:应用80/20原则、帕累托法则等重要规则来分析问题,确定问题的关键点。 解决方案 解决方案是麦肯锡方法的第二部分。它提供了一种系统化的方法来制定解决方案,确保解决方案的可行性和...
4. 计算路径:根据贪心策略计算旅行路径。 5. 输出结果:打印出旅行路线和总距离。 **调试工具** 其他文件如`.dsp`、`.dsw`、`.ncb`、`.opt`和`.plg`是Microsoft Visual C++项目文件,用于管理和编译C程序。`tsp....
河上有船,但是每次只能乘坐4人,且每次乘客满员时才能开船,到河对岸后空船返回。但船上乘客不能同时有 3个红客 、1个黑客 或者 1个红客 、 3个黑客的组合,除此之外其他组合均安全。请用pv操作解决红客、黑客过河...
4. **编码实现**:在"旅行商问题.cpp"文件中,开发者可能使用C++语言实现了上述算法之一。程序会读取像"TSP20.TXT"这样的数据文件,文件中包含了城市间的距离矩阵。通过读取这些数据,程序计算出最短路径。 5. **...
6. **回溯**:如果选择的下一个城市导致无法满足问题的约束,或者找到了一个解,就需要回溯到上一步,尝试其他选择。 **C++实现TSP问题的回溯法:** 在C++中,实现TSP的回溯法通常涉及以下几个关键部分: - 定义...
此外,对于更复杂的水壶问题,例如要求得到其他非整数倍的水量,可能需要引入更复杂的算法,如回溯或动态规划。 在提供的压缩文件"223811.rar"和"人工智能+水壶问题的求解.rar.rar"中,很可能包含了具体的代码示例...
这种情况下,某些服务在未由其他服务或程序使用时将自动停止。解决该问题的关键在于正确地安装和配置 MySQL 服务。 问题描述 MySQL 服务启动失败问题是指在本地计算机上安装了 MySQL 服务,但是服务启动后却立即...
JSP 中文乱码问题的成因主要有两方面,一是 Java 和 JSP 文件本身编译时产生的乱码问题,二是 Java 程序于其他媒介交互产生的乱码问题。 Java 和 JSP 文件编译时产生的乱码问题 Java 和 JSP 源文件中可能包含有...
【TSP问题】全称旅行商问题(Travelling ...通过分析和运行这个MATLAB实现,你可以深入了解遗传算法如何解决TSP问题,并且可以作为模板应用于其他类似的优化问题。同时,也可以借此机会学习MATLAB编程和优化算法设计。