9/22蚂蚁第三题构造n*n的数组
类似于广度优先的原理,按左上到右下对角线开始构造数组里的数,按层进行赋值。
#蚂蚁笔试##蚂蚁集团#
package com.test; import java.util.*; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); if (n == 1 || n == 2) { System.out.println(-1); return; } int count2 = (n * n) / 2; int count1 = n * n - count2; int[][] nums = new int[n][n]; nums[0][0] = 1; nums[1][0] = 1; nums[0][1] = 1; count1 -= 3; for (int i = 2; i < 2 * n - 1; i++) { for (int j = 0; j <= i; j++) { if (j >= n || (i - j) >= n) { continue; } if (i < n && (j == 0 || j == i)) { continue; } int k = i - j; if ((nums[j - 1][k - 1] + nums[j - 1][k] + nums[j][k - 1]) % 2 == 0) { nums[j][k] = 1; count1 -= 1; } else { nums[j][k] = 2; count2 -= 1; } } if (i < n) { if ((nums[1][i - 1] + nums[0][i - 1]) % 2 != 0) { if (count1 < count2) { count2 -= 1; nums[0][i] = 2; } else { count1 -= 1; nums[0][i] = 1; } } else { if (nums[0][i - 1] % 2 == 0) { nums[0][i] = 2; count2 -= 1; } else { nums[0][i] = 1; count1 -= 1; } } if ((nums[i - 1][1] + nums[i - 1][0]) % 2 != 0) { if (count1 < count2) { count2 -= 1; nums[i][0] = 2; } else { count1 -= 1; nums[i][0] = 1; } } else { if (nums[i - 1][0] % 2 == 0) { nums[i][0] = 2; count2 -= 1; } else { nums[i][0] = 1; count1 -= 1; } } } } int num1 = 1; int num2 = 2; for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { if (nums[i][j] == 1) { System.out.print(num1); num1 += 2; } else { System.out.print(num2); num2 += 2; } if (j != n - 1) { System.out.print(" "); } } if (i != n - 1) { System.out.println(); } } } }
#蚂蚁笔试##蚂蚁集团#