数字三角形
功能实现了,不过细节没有修改,想用的可以修改修改,哪里细节不好注释都写了
*这个程序没有设置相应的,如果输入不是数学三角形的就会报错!没事改改,加点条件,别这么懒 再用Arraylist我就是狗,真难用 * */ import java.util.ArrayList; import java.util.Scanner; /** * The type Three. */ public class three { /** * The constant arrayList.//输入的数 */ public static ArrayList<String[]> arrayList = new ArrayList<>(); /** * The constant array.//和,没啥用 */ public static int[][] array = new int[10][10]; /** * The constant array2.//标记走哪里的1-下 2-右下 */ public static int[][] array2 = new int[10][10]; /** * The constant data.//走过的 */ public static ArrayList<Integer> data = new ArrayList(); /** * The constant scanner. */ public static Scanner scanner = new Scanner(System.in); /** * The constant N. */ public static int N = 0; /** * The entry point of application. * * @param args the input arguments */ public static void main(String[] args) { System.out.println("请输入行数"); N = scanner.nextInt(); scin(); System.out.println(maxSum(0,0)); scn(); } /** * 显示走过的路 */ private static void scn(){ da(); for (Integer i : data) { System.out.println(i); } } /** * 讲走过的路加入data数组中 */ private static void da(){ int i = 0; int j = 0; while (true){ if(array2[i][j] == 1){ String[] re1 = re(i); data.add(conversion(re1[j])); i++; }else{ if (array2[i][j] == 2){ String[] re2 = re(i); data.add(conversion(re2[j])); i++; j++; }else { String[] re3 = re(i); data.add(conversion(re3[j])); break; } } } } /** * Scin. * -1--结束一行 * -2--结束本次 * 都不是--输入 */ public static void scin(){ System.out.println("---------------------------"); System.out.println("每行结束请输入-1,整体结束请输入-2"); System.out.println("---------------------------"); ArrayList<String> datas = new ArrayList<>(); while(true){ String data = scanner.next(); if (!data .equals("-1") && !data .equals("-2") ){ datas.add(data); }else{ if (!data .equals("-2") ){ System.out.println("结束本行输入"); arrayList.add(become_In(datas)); datas.clear(); }else{ System.out.println("结束本次输入"); arrayList.add(become_In(datas)); datas.clear(); break; } } } } /** * 完成功能 * @param r 行 * @param j 列 * @return sum值 * 咋实现的不用写把,你要是这都不会就找豆腐撞死把 */ private static int maxSum(int r,int j){ if (r == N-1){ String[] a = re(r); array[r][j] = conversion(a[j]); return conversion(a[j]); } int sum1 = maxSum(r+1,j); int sum2 = maxSum(r+1,j+1); if (sum1 > sum2){ String[] b = re(r); array[r][j] = sum1+conversion(b[j]); array2[r][j] = 1; return sum1+conversion(b[j]); } String[] c = re(r); array[r][j] = sum2+conversion(c[j]); array2[r][j] =2; return sum2+conversion(c[j]); } private static String[] re(int r){ String[] a = arrayList.get(r); return a; } /** * 将字符串转换为int * @param s * @return */ private static int conversion(String s){ int i = Integer.parseInt(s); return i; } /** * 将arraylist中的东西转换为数组 * @param x * @return */ private static String[] become_In(ArrayList<String> x){ String[] arr = x.toArray(new String[x.size()]); return arr; }