1050
螺旋矩阵,难
package com.company; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.Scanner; public class Main { public static void main(String[] args) { // write your code here Scanner sc=new Scanner(System.in); int num=sc.nextInt(); int[] input=new int[num]; int i=0,j=0,k; for (i=0;i<num;i++){ input[i]=sc.nextInt(); } int m1=minfactor(num); int n1=num/m1; int[][] data = new int[m1][n1]; data[0][0] = input[num - 1];//其它值为0 for (int l = num - 2; l >= 0; l--) { boolean up = false, down = false, left = false, right = false; if (i - 1 >= 0 && data[i - 1][j] == 0) up = true; if (i + 1 < m1 && data[i + 1][j] == 0)// down = true; if (j + 1 < n1 && data[i][j + 1] == 0)// right = true; if (j - 1 >= 0 && data[i][j - 1] == 0) left = true; // down right if (!up && down && !left && right) {//down和right为true,表示右下角的点存在 j = j + 1; data[i][j] = input[l]; continue; } // down if (!up && down && !left && !right) { i = i + 1; data[i][j] = input[l]; continue; } // left down if (!up && down && left && !right) { i = i + 1; data[i][j] = input[l]; continue; } // left if (!up && !down && left && !right) { j = j - 1; data[i][j] = input[l]; continue; } // left up if (up && !down && left && !right) { j = j - 1; data[i][j] = input[l]; continue; } // up if (up && !down && !left && !right) { i = i - 1; data[i][j] = input[l]; continue; } // up right if (up && !down && !left && right) { i = i - 1; data[i][j] = input[l]; continue; } // right if (!up && !down && !left && right) { j = j + 1; data[i][j] = input[l]; continue; } for (i = 0; i < m1; i++) { for (j = 0; j < n1 - 1; j++) { System.out.print(data[i][j] + " "); } System.out.println(data[i][n1 - 1]); } } } /*写一个函数,用于获取num的因数m-n的最小值 * 思路:*/ public static int minfactor(int num) { int[] fm = new int[num]; int[] fn = new int[num]; ArrayList<Integer> differ=new ArrayList<Integer>(); int temp; int x=0; for (int m = 1; m <= num; m++) { if (num % m == 0) { fn[m - 1] = m; fm[m - 1] = num / m; if (fm[m - 1] < fn[m - 1]) { break; } else{ differ.add( fm[m - 1] - fn[m - 1]); } } } Collections.sort(differ); for (int m = 0; m < differ.size(); m++) { if (fm[m] - fn[m] == differ.get(0)) { x= fm[m]; } } return x; } }
勿在浮沙筑高台