Тренировочные задания: Многомерные массивы
Шесть задач на трёхмерные массивы. Это варианты высокого уровня сложности: всё то же, что и для матриц, только добавляется третий индекс.
Размеры: 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 ? "найдено" : "не найдено");