Тренировочные задания: Многомерные массивы

Шесть задач на трёхмерные массивы. Это варианты высокого уровня сложности: всё то же, что и для матриц, только добавляется третий индекс.

Размеры: L слоёв, R строк, C столбцов. Каждый от 1 до 10.

Задача 1. Ввод трёхмерного массива

Считать L, R, C, затем L × R × C чисел. Элементы вводятся последовательно: сначала весь первый слой, затем второй и так далее.

Пример ввода:

2 2 2
1 2 3 4
5 6 7 8

Пример вывода:

Введён массив 2 x 2 x 2
Решение
int l, r, c;
int a[MAX_SIZE][MAX_SIZE][MAX_SIZE];

scanf("%d %d %d", &l, &r, &c);
for (int k = 0; k < l; k++)
{
    for (int i = 0; i < r; i++)
    {
        for (int j = 0; j < c; j++)
        {
            scanf("%d", &a[k][i][j]);
        }
    }
}
printf("Введён массив %d x %d x %d\n", l, r, c);

Задача 2. Вывод по слоям

Напечатать массив послойно: каждый слой — таблица, между слоями пустая строка.

Пример ввода:

2 2 2
1 2 3 4
5 6 7 8

Пример вывода:

Слой 1:
   1   2
   3   4

Слой 2:
   5   6
   7   8
Решение
for (int k = 0; k < l; k++)
{
    printf("Слой %d:\n", k + 1);
    for (int i = 0; i < r; i++)
    {
        for (int j = 0; j < c; j++)
        {
            printf("%4d", a[k][i][j]);
        }
        printf("\n");
    }
    printf("\n");
}

Задача 3. Сумма всех элементов

Найти сумму всех элементов трёхмерного массива.

Пример ввода:

2 2 2
1 2 3 4
5 6 7 8

Пример вывода:

Сумма: 36
Решение
int sum = 0;
for (int k = 0; k < l; k++)
{
    for (int i = 0; i < r; i++)
    {
        for (int j = 0; j < c; j++)
        {
            sum += a[k][i][j];
        }
    }
}
printf("Сумма: %d\n", sum);

Задача 4. Минимум и максимум

Найти минимальный и максимальный элементы.

Пример ввода:

2 2 2
1 2 3 4
5 6 7 8

Пример вывода:

минимум = 1, максимум = 8
Решение
int mn = a[0][0][0];
int mx = a[0][0][0];
for (int k = 0; k < l; k++)
{
    for (int i = 0; i < r; i++)
    {
        for (int j = 0; j < c; j++)
        {
            if (a[k][i][j] < mn) mn = a[k][i][j];
            if (a[k][i][j] > mx) mx = a[k][i][j];
        }
    }
}
printf("минимум = %d, максимум = %d\n", mn, mx);

Задача 5. Положительные в каждом слое

Для каждого слоя посчитать количество положительных элементов.

Пример ввода:

2 2 2
1 -2 3 4
5 6 -7 8

Пример вывода:

слой 1: 3
слой 2: 3
Решение
for (int k = 0; k < l; k++)
{
    int count = 0;
    for (int i = 0; i < r; i++)
    {
        for (int j = 0; j < c; j++)
        {
            if (a[k][i][j] > 0)
            {
                count++;
            }
        }
    }
    printf("слой %d: %d\n", k + 1, count);
}

Задача 6. Поиск значения

Проверить, встречается ли в массиве заданное число.

Пример ввода:

2 2 2
1 2 3 4
5 6 7 8
6

Пример вывода:

найдено
Решение
int value;
scanf("%d", &value);

int found = 0;
for (int k = 0; k < l && !found; k++)
{
    for (int i = 0; i < r && !found; i++)
    {
        for (int j = 0; j < c; j++)
        {
            if (a[k][i][j] == value)
            {
                found = 1;
                break;
            }
        }
    }
}
printf("%s\n", found ? "найдено" : "не найдено");

Подтверждение

—