Задача на трёхмерный массив с
Детские пластиковые кубики трех цветов сложены в прямоугольный параллелепипед размером MxNxP кубиков. Определить, найдется ли в этом параллелепипеде хотя бы один слой толщиной в один кубик, расположенный параллельно какой-нибудь грани параллелепипеда, сложенный из кубиков одного цвета. как мне проверить плоскость массива?
на c
#include <stdio.h>
int main() {
int M, N, P;
int plld[10][10][10];
int color[3] = {0};
printf("Введите размеры параллелепипеда (M N P): ");
scanf("%d %d %d", &M, &N, &P);
printf("Введите цвета кубиков (0 - красный, 1 - зеленый, 2 - синий):\n");
for (int i = 0; i < M; i++) {
for (int j = 0; j < N; j++) {
for (int k = 0; k < P; k++) {
scanf("%d", &plld[i][j][k]);
color[plld[i][j][k]]++;
}
}
}
for (int i = 0; i < 3; i++) {
if (color[i] >= N * P || color[i] >= M * P || color[i] >= M * N) {
printf("Слой из кубиков одного цвета существует!\n");
return 0;
}
}
printf("Слой из кубиков одного цвета не существует.\n");
return 0;
}
Я решил эту задачу и оставляю ответ выше.
Ответы (1 шт):
Автор решения: LazyHat
→ Ссылка
Я бы начал с реализации трехмерного массива подобного этому, для того чтобы было проще оперировать плоскостями и структурой в целом:
template <typename T, std::size_t X, std::size_t Y, std::size_t Z>
class Array3
{
typedef std::array<std::array<std::array<T, Z>, Y>, X> ArrayXYZ;
typedef std::array<std::array<T, Z>, Y> ArrayYZ;
typedef std::array<std::array<T, Z>, X> ArrayXZ;
typedef std::array<std::array<T, Y>, X> ArrayXY;
ArrayXYZ mArray;
public:
Array3() {}
ArrayYZ getPlaneYZ(std::size_t x)
{
ArrayYZ result = mArray[x];
return result;
}
ArrayXZ getPlaneXZ(std::size_t y)
{
ArrayXZ result;
for (std::size_t x = 0; x < X; x++)
for (std::size_t z = 0; z < Z; z++)
result[x][z] = mArray[x][y][z];
return result;
}
ArrayXY getPlaneXY(std::size_t z)
{
ArrayXZ result;
for (std::size_t x = 0; x < X; x++)
for (std::size_t y = 0; y < Y; y++)
result[x][y] = mArray[x][y][z];
return result;
}
};
А дальше просто, проходишься по всем плоскостям и сравниваешь в них элементы между собой.