-7

ユーザーが入力する数字の数に応じて、Javaでこれらのパターンを作成する必要があります。ユーザーが3を入力した場合は、次のようになります。

1  2  3   ------------>
8  9  4   |------->   |
7  6  5   <-----------|

ユーザーが4を入力した場合:

 1   2   3  4
12  13  14  5
11  16  15  6
10   9   8  7 

ユーザーが5を入力した場合:

 1   2   3   4  5
16  17  18  19  6
15  24  25  20  7
14  23  22  21  8
13  12  11  10  9

等々..

4

2 に答える 2

4

ついに私は解決策を見つけました。このような

//you can change Input No Here.
    int INPUT = 5;

    //statics for direction type 
    final int LEFT = 1;
    final int DOWN = 2;
    final int RIGHT = 3;
    final int UP = 4;

    //Grid Array
    int[][] patt = new int[INPUT][INPUT];

    //initial position 
    int x = 0;
    int y = 0;

    //initial direction
    int Direction = LEFT;

    //Master Loop
    for (int i = 0; i < INPUT * INPUT; i++) {

        int temp = i + 1;

        //Checking boundaries
        if (y > INPUT - 1) {
            Direction = DOWN;
            x++;
            y--;
            i--;
            continue;
        } else if (x > INPUT - 1) {
            Direction = RIGHT;
            x--;
            y--;
            i--;
            continue;
        } else if (y < 0) {
            Direction = UP;
            y++;
            x--;
            i--;
            continue;
        }else if (x < 0) {
            Direction = LEFT;
            y++;
            x++;
            i--;
            continue;
        }

        if (patt[x][y] == 0) {
            patt[x][y] = temp;
        } else {
            if (Direction == LEFT) {
                Direction = DOWN;
                y--;
            } else if (Direction == DOWN) {
                Direction = RIGHT;
                x--;
            } else if (Direction == RIGHT) {
                Direction = UP;
                y++;
            } else {
                Direction = LEFT;
                x++;
            }
            i--;
        }

        switch (Direction) {
        case LEFT:
            y++;
            break;
        case DOWN:
            x++;
            break;
        case RIGHT:
            y--;
            break;
        case UP:
            x--;
            break;
        }
    }// Master Loop Ends

    // Print Grid Array
    for (int i = 0; i < INPUT; i++) {
        for (int k = 0; k < INPUT; k++)
            if (patt[i][k] <= 9)
                System.out.print(" "+patt[i][k] + " ");
            else
                System.out.print(patt[i][k] + " ");
        System.out.println();
    }

@lakshmanの提案から素晴らしいヒントを得ました。@lakshmanに感謝します。

于 2013-03-05T09:29:12.333 に答える
1

あなたが調べることができる1つの方向:

最初に空の 2D 配列を作成して結果を保存します

私が観察できるパターンは、たとえば、次元5のテーブルを塗りつぶし、左上隅から開始し、5つの数字を右に塗りつぶし、次に時計回りに方向を変え、4つの数字を塗りつぶし、次に時計回りに方向を変え、4つの数字を塗りつぶし、方向を変えることです、塗りつぶし 3、方向転換塗りつぶし 3....

「塗りつぶす桁数」は、n、n-1、n-1、n-2、n-2.....1、1のパターンを持っています

(もっと簡単なパターンは他にもあると思いますが、これが難しくて実装できないとは思いません)

もう 1 つの方法は、上記と同様に、方向を表す変数を保持し、左上隅から開始し、1) 境界または 2) 既に数値が入力されている配列エントリに到達するまで数値を入力し続けます。次に、方向を時計回りに回します。すべての数字が埋まるまで繰り返します。

于 2013-03-05T06:59:43.787 に答える