Спиральный ромбовидный узор - PullRequest
0 голосов
/ 09 мая 2020

Сейчас я пытаюсь напечатать рисунок ниже в java, пожалуйста, помогите мне в его решении.

Ввод: 3, abcdefghijklm

вывод:

  c
 bjd
aimke
 hlf
  g

Я строю ромбовидный узор со звездой, застрявшие в печатных значениях из массива по спирали в форме ромба, как показано выше.

1 Ответ

2 голосов
/ 12 мая 2020
public static void rhombus() {
    int n = 3;
    int size = 2 * n - 1;
    char[][] sol = new char[size][size];
    for (int i = 0; i < size; i++) {
        for (int j = 0; j < size; j++) {
            sol[i][j] = ' ';
        }
    }

    int i = size / 2;
    int j = 0;
    String s = "abcdefghijklmnop";
    int len = s.length();
    int in = 0;
    int left = 0, top = 0, right = size - 1;
    int bottom = size - 1;
    boolean flag = false;
    while (i != j) {
        while (i >= top && !flag) {
            sol[i][j] = s.charAt((in++) % len);
            if (i == size / 2 && j == size / 2)
                flag = true;
            i--;
            j++;
        }
        if (flag == true)
            break;
        i += 2;
        top++;
        left++;
        while (j <= right && !flag) {
            sol[i][j] = s.charAt((in++) % len);
            i++;
            j++;
        }
        j -= 2;
        right--;
        while (i <= bottom && !flag) {
            sol[i][j] = s.charAt((in++) % len);
            i++;
            j--;
        }
        bottom--;
        i -= 2;
        while (j >= left && !flag) {
            sol[i][j] = s.charAt((in++) % len);
            i--;
            j--;
        }
        j++;
    }
    sol[i][j] = s.charAt((in++) % len);
    for (int a = 0; a < size; a++) {
        for (int b = 0; b < size; b++) {
            System.out.print(sol[a][b]);
        }
        System.out.println();
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...