
Java, ДАМ 30 БАЛІВ Заполните n мерный квадратный массив числами, которые увеличиваются на 1 по
спирали (число n должно задаваться с клавиатуры). Выведите результат на экран с соблюдением ширины столбцов. Для примера массив 4 на 4 должен выглядеть как указано в примере. Пример: 1 2 3 4 12 13 14 5 11 16 15 6 10 9 8 7 Дополнительно (не обязательно): попробуйте решить только одним циклом.

Ответы на вопрос

Ответ:
import java.util.Scanner;
public class SpiralMatrix {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("Enter n: ");
int n = scanner.nextInt();
int[][] matrix = new int[n][n];
int rowStart = 0;
int rowEnd = n - 1;
int colStart = 0;
int colEnd = n - 1;
int count = 1;
while (rowStart <= rowEnd && colStart <= colEnd) {
for (int i = colStart; i <= colEnd; i++) {
matrix[rowStart][i] = count++;
}
rowStart++;
for (int i = rowStart; i <= rowEnd; i++) {
matrix[i][colEnd] = count++;
}
colEnd--;
if (rowStart <= rowEnd) {
for (int i = colEnd; i >= colStart; i--) {
matrix[rowEnd][i] = count++;
}
rowEnd--;
}
if (colStart <= colEnd) {
for (int i = rowEnd; i >= rowStart; i--) {
matrix[i][colStart] = count++;
}
colStart++;
}
}
for (int[] row : matrix) {
for (int num : row) {
System.out.printf("%2d ", num);
}
System.out.println();
}
}
}



Конечно! Вот пример решения задачи на Java, где n - размерность квадратного массива, задаваемая с клавиатуры:
javaimport java.util.Scanner;
public class SpiralArray {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("Введите размерность массива: ");
int n = scanner.nextInt();
scanner.close();
int[][] array = new int[n][n];
int value = 1;
int minRow = 0;
int maxRow = n - 1;
int minColumn = 0;
int maxColumn = n - 1;
while (value <= n * n) {
// Заполнение верхней строки слева направо
for (int i = minColumn; i <= maxColumn; i++) {
array[minRow][i] = value++;
}
minRow++;
// Заполнение правого столбца сверху вниз
for (int i = minRow; i <= maxRow; i++) {
array[i][maxColumn] = value++;
}
maxColumn--;
// Заполнение нижней строки справа налево
for (int i = maxColumn; i >= minColumn; i--) {
array[maxRow][i] = value++;
}
maxRow--;
// Заполнение левого столбца снизу вверх
for (int i = maxRow; i >= minRow; i--) {
array[i][minColumn] = value++;
}
minColumn++;
}
// Вывод массива с соблюдением ширины столбцов
int columnWidth = String.valueOf(n * n).length() + 1;
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
System.out.printf("%-" + columnWidth + "d", array[i][j]);
}
System.out.println();
}
}
}
После запуска программы она запросит у пользователя размерность массива (n
). Затем будет создан двумерный массив размером n
на n
, и он будет заполнен числами, увеличивающимися на 1 по спирали. Наконец, результат будет выведен на экран с соблюдением ширины столбцов.
Надеюсь, это поможет вам решить задачу!


Топ вопросов за вчера в категории Информатика







Последние заданные вопросы в категории Информатика
-
Математика
-
Литература
-
Алгебра
-
Русский язык
-
Геометрия
-
Английский язык
-
Химия
-
Физика
-
Биология
-
Другие предметы
-
История
-
Обществознание
-
Окружающий мир
-
География
-
Українська мова
-
Информатика
-
Українська література
-
Қазақ тiлi
-
Экономика
-
Музыка
-
Право
-
Беларуская мова
-
Французский язык
-
Немецкий язык
-
МХК
-
ОБЖ
-
Психология
-
Физкультура и спорт
-
Астрономия
-
Кыргыз тили
-
Оʻzbek tili