Fighting


私信TA

用户名:Wgt

访问量:3810

签 名:

等  级
排  名 1737
经  验 2676
参赛次数 0
文章发表 4
年  龄 0
在职情况 学生
学  校 河南农业大学
专  业

  自我简介:

解题思路:

根据N,创建一个N*N的二维数组。按照1  2  3 4.....N*N 的顺观察数组元素的下标。 如下:

  以N=5时为例子:

元素的值:                            1                 2               3                4              5

出现位置下标值(行,列)  (4,2)   (0,3)   (1,4)  (2,0) (3,1

元素的值:                            10               9             8                7           6

出现位置下标值(行,列)  (1,0)   (0,4)   (4,3)  (3,2) (2,1)  

元素的值:                            11               12            13             14            15

出现位置下标值(行,列)  (0,0)   (1,1)   (2,2)  (3,3) (4,4)  

元素的值:                           20                19             18               17          16

出现位置下标值(行,列)  (2,3)   (1,2)   (0,1)  (4,0) (3,4)  

元素的值:                           21                22             23               24          25(N*N)

出现位置下标值(行,列)  (2,3)   (1,2)   (0,1)  (4,0) (3,4)  



//第一个元素1 下标确定  (N-1 ,  N/2)

//红色坐标均为特殊位置元素的坐标  特殊在       5--6的变换   下标 横坐标减一    纵坐标不变

                                                                           10--11的变换   下标 横坐标减一    纵坐标不变

                                                                            15--16的变换   下标 横坐标减一    纵坐标不变

                                                                             20--21的变换   下标 横坐标减一    纵坐标不变

其他位置元素(i,j)   i++;   j++;

                           i==N-1时  i=0;      j==N-1  J=0;

注意事项:

自己多调试吧

参考代码:

import java.util.Scanner;

public class A1188幻方 {
 public static void main(String args[]) {
  Scanner sc = new Scanner(System.in);
  while (sc.hasNext()) {
   int N = sc.nextInt();
   if (N == 0)
    break;
   int a[][] = new int[N][N];
   int i = N - 1;// 行
   int j = N / 2;// 列
   int n = 1;
   a[i][j] = n;
   while (n < N * N) {
    if (n % N != 0) {
     if (i == N - 1) {
      i = 0;
     } else {
      i++;
     }
     if (j == N - 1) {
      j = 0;
     } else {
      j++;
     }
    } else {
     i = i - 1;
    }
    n = n + 1;
    a[i][j] = n;
   }
   for (int p = 0; p < N; p++) {
    for (int q = 0; q < N; q++) {
     if (N * N < 10) {
      System.out.printf("%d ", a[p][q]);
     } else if (N * N > 10 && N * N < 100) {
      System.out.printf("%2d ", a[p][q]);
     } else {
      System.out.printf("%3d ", a[p][q]);
     }
    }
    System.out.println("");
   }
   System.out.println("");
  }
 }
}


 

0.0分

1 人评分

  评论区

  • «
  • »