табуретка из трёхмерного массива
Нужно с помощью трёх массивов описать табуретку с перекладинами, элементы табуретки приравнять единице, а остальное нулями. Ну и вывод массива осуществлять послойно. А его размеры заранее вводятся пользователем.
Будет очень интересно посмотреть на решение, да и от источника с подробной информацией о трёхмерных массивов не отказываюсь
Ответы (3 шт):
Автор решения: TigerTV.ru
→ Ссылка
Табуретка с перекладинами:
int taburet[3][5][3] = {
{
{1, 1, 1},
{1, 0, 1},
{1, 1, 1},
{1, 0, 1},
{1, 0, 1},
},
{
{1, 1, 1},
{0, 0, 0},
{1, 0, 1},
{0, 0, 0},
{0, 0, 0},
},
{
{1, 1, 1},
{1, 0, 1},
{1, 1, 1},
{1, 0, 1},
{1, 0, 1},
},
};
Автор решения: MiniMax
→ Ссылка
Решение. Можно добавить проверок вводимых размеров в зависимости от условия. Тут допустима табуретка любых размеров, включая высоту и ширину 1.
#include <stdio.h>
#include <string.h>
void print_3d_arr(size_t z, size_t y, size_t x, int arr[z][y][x]) {
for(size_t i = 0; i < z; i++) {
for(size_t j = 0; j < y; j++) {
for(size_t k = 0; k < x; k++) {
printf("%d ", arr[i][j][k]);
}
puts("");
}
puts("");
}
}
void make_horz_line(size_t hght, size_t wdth, int frame[hght][wdth], size_t n) {
for(size_t y = 0; y < hght; y++) {
for(size_t x = 0; x < wdth; x++) {
if (y == n) {
frame[y][x] = 1;
}
}
}
}
void make_vert_line(size_t hght, size_t wdth, int frame[hght][wdth], size_t n) {
for(size_t y = 0; y < hght; y++) {
for(size_t x = 0; x < wdth; x++) {
if (x == n) {
frame[y][x] = 1;
}
}
}
}
void make_side(size_t hght, size_t wdth, int frame[hght][wdth]) {
make_horz_line(hght, wdth, frame, 0);
make_horz_line(hght, wdth, frame, hght / 2);
make_vert_line(hght, wdth, frame, 0);
make_vert_line(hght, wdth, frame, wdth - 1);
}
void make_middle(size_t hght, size_t wdth, int frame[hght][wdth]) {
make_horz_line(hght, wdth, frame, 0);
frame[hght / 2][0] = 1;
frame[hght / 2][wdth - 1] = 1;
}
int main() {
size_t wdth, hght, frames_num;
puts("Enter height:");
scanf("%zu", &hght);
puts("Enter width:");
scanf("%zu", &wdth);
frames_num = wdth;
int model[frames_num][hght][wdth];
memset(model, 0, frames_num * hght * wdth * sizeof(model[0][0][0]));
make_side(hght, wdth, model[0]);
for(size_t i = 1; i < frames_num - 1; i++) {
make_middle(hght, wdth, model[i]);
}
make_side(hght, wdth, model[frames_num - 1]);
print_3d_arr(frames_num, hght, wdth, model);
return 0;
}
Тест
$ gcc tabouret.c
$ echo -n 5 4 | ./a.out
Enter height:
Enter width:
1 1 1 1
1 0 0 1
1 1 1 1
1 0 0 1
1 0 0 1
1 1 1 1
0 0 0 0
1 0 0 1
0 0 0 0
0 0 0 0
1 1 1 1
0 0 0 0
1 0 0 1
0 0 0 0
0 0 0 0
1 1 1 1
1 0 0 1
1 1 1 1
1 0 0 1
1 0 0 1
Автор решения: Mikhailo
→ Ссылка
"Срезы" снизу вверх, сиденье — последний двумерный массив.
const int ZSIZE = 6, YSIZE = 4, XSIZE = 4;
int stool[ZSIZE][YSIZE][XSIZE] =
{
{
{ 1, 0, 0, 1 },
{ 0, 0, 0, 0 },
{ 0, 0, 0, 0 },
{ 1, 0, 0, 1 },
},
{
{ 1, 0, 0, 1 },
{ 0, 0, 0, 0 },
{ 0, 0, 0, 0 },
{ 1, 0, 0, 1 },
},
{
{ 1, 1, 1, 1 },
{ 1, 0, 0, 1 },
{ 1, 0, 0, 1 },
{ 1, 1, 1, 1 },
},
{
{ 1, 0, 0, 1 },
{ 0, 0, 0, 0 },
{ 0, 0, 0, 0 },
{ 1, 0, 0, 1 },
},
{
{ 1, 0, 0, 1 },
{ 0, 0, 0, 0 },
{ 0, 0, 0, 0 },
{ 1, 0, 0, 1 },
},
{
{ 1, 1, 1, 1 },
{ 1, 1, 1, 1 },
{ 1, 1, 1, 1 },
{ 1, 1, 1, 1 },
},
};