123456789 往这串数字里插入3个乘号,使得结果最大

来源:互联网 发布:淘宝沉香哪家比较好 编辑:程序博客网 时间:2024/05/16 15:48
public class ProMax {public static void main(String[] args) {// 方法一:int[] arr = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };int[][] dp = new int[4][10];// 初始化边界for (int i = 1; i < 10; i++)for (int j = 1; j <= i; j++)dp[0][i] = arr[j] + dp[0][i] * 10;// 没有乘号的时候// 枚举3个乘号for (int i = 1; i <= 3; i++) {for (int j = i + 1; j <= 9; j++) {for (int k = i; k < j; k++) {int font = 0;for (int n = k + 1; n <= j; n++)font = arr[n] + font * 10;// dp[i - 1][k]是前一段的最大乘积,font是剩下的那部分if (dp[i][j] < dp[i - 1][k] * font)dp[i][j] = dp[i - 1][k] * font;}}}System.out.println(dp[3][9]);// 方法二:int max = 0;for (int i = 1; i <= 6; i++) {for (int j = i + 1; j <= 7; j++) {for (int k = j + 1; k <= 8; k++) {// 三个位置,可以截取四段int a = getnum(0, i);int b = getnum(i, j);int c = getnum(j, k);int d = getnum(k, 9);int pro = a * b * c * d;if (pro > max)max = pro;}}}System.out.println(max);}static int data[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };// 这是给第二个方法用的public static int getnum(int i, int j) {int num = 0;for (int k = i; k < j; k++)num = data[k] + num * 10;return num;}}

0 0
原创粉丝点击