Дан куб состоящий из кубиков, каждый кубик случайно выбирается прозрачный\непрозрачный. Найти все просветы в кубе. - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Просветы. Куб состоит из n^3(для начала примем что куб у нас 3х3х3) прозрачных и непрозрачных элементарных кубиков. Имеется ли хотя бы один просвет по каждому из трех измерений? Если это так, вывести координаты каждого просвета. Рекомендация. Для хранения куба выделить трехмерный массив с базовым типом минимально возможного размера. Вот код, подскажите, адекват ли я, и натолкните на мысль как организовать правильно поиск + вывод координат.
// 3.2.27.cpp: определяет точку входа для консольного приложения.
//
 
#include "stdafx.h"
#include <conio.h>
#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
 
void main()
{   
    int n,i,j,k,null;
    
     printf("Vvedite razmernost kuba: ");
        scanf("%d",&n);
    int*** arr=new int**[n];             //создание 
    for (int i = 0; i < n; i++)             
    {
        arr[i] = new int *[n];                      
        for (int j = 0; j <n; j++)
            arr[i][j] = new int [n];
    }                                   //массива
 
    for (i=0; i<n; i++)
        for (j=0; j<n; j++)
            for (k=0; k<n; k++) arr[i][j][k]=rand()%2;
 
    for (i=0; i<n; i++)
    {
        printf("\n");
        for (j=0; j<n; j++)
        {
            printf(" ");
            for (k=0; k<n; k++)             
            printf(" %d",arr[i][j][k]);
        }
        
    }
    printf("\n");
 
    for (i=0; i<n; i++)                 //проход по каждому из направлей типо вверх, вниз, всторону                 
        for (j=0; j<n; j++)
            if (arr[i][j][0]==0)
            {  
                for (k=0; k<n;k++)
                    { if (arr[i][j][k]==0)
                        printf(" 1   %d,%d,%d \n",i,j,k);
                    }
            }

    for (i=0; i<n; i++)                                  
        for (k=0; k<n; k++)
            if (arr[i][0][k]==0)
            {  
                for (j=0; j<n;j++)
                    { if (arr[i][j][k]==0)
                        printf(" 1   %d,%d,%d \n",i,j,k);
                    }
            }

    for (j=0; j<n; j++)                                  
        for (k=0; k<n; k++)
            if (arr[0][j][k]==0)
            {  
                for ( i=0; i<n;i++)
                    { if (arr[i][j][k]==0)
                        printf(" 3   %d,%d,%d \n",i,j,k);
                    }
            }

    for (int i = 0; i < n; i++)
    {
        
        for (int j = 0; j <n; j++)
            free(arr[i][j]);
            free(arr[i]);
    }
    free (arr);
 
    getch();
 
}

Решение задачи: «Дан куб состоящий из кубиков, каждый кубик случайно выбирается прозрачный\непрозрачный. Найти все просветы в кубе.»

textual
Листинг программы
#include <stdio.h>
const int N=4;//пусть размер равен 4
unsigned char a[N][N][N];//кубик
int main(){
  unsigned char spaces[N][N][3];
  int i, j, k;
  for (i=0; i<N; i++)
    for (j=0; j<N; j++)
        spaces[i][j][0]=spaces[i][j][1]=spaces[i][j][2]=0;
  for (i=0; i<N; i++)
    for (j=0; j<N; j++)
      for (k=0; k<N; k++)
      {
        scanf("%d", &(a[i][j][k]));
        spaces[i][j][0]=spaces[i][j][0]||a[i][j][k];
        spaces[i][k][1]=spaces[i][k][1]||a[i][j][k];
        spaces[j][k][2]=spaces[j][k][2]||a[i][j][k];
      }
  for (k=0; k<3; k++){
    printf("\nПросветы в %d-й грани", k);
    for (i=0; i<N; i++)
      for (j=0; j<N; j++)
        if (!spaces[i][j][k]) printf("(%d:%d), ", i, j);
    }
  return 0;
}

Объяснение кода листинга программы

  1. Включаем заголовочный файл stdio.h для использования функций ввода-вывода
  2. Задаём размер куба N=4
  3. Создаём массив куба a[N][N][N] и инициализируем его значениями по умолчанию(прозрачный)
  4. Создаём массив spaces[N][N][3] для хранения информации о просветах в каждой грани куба
  5. Проходим по всем элементам массива spaces и устанавливаем начальные значения(0) для всех граней
  6. Проходим по всем элементам куба a в цикле и с помощью функции scanf считываем значения элементов
  7. Обновляем значения массива spaces, устанавливая в true(1) для соответствующих элементов, если значение элемента куба a равно 0(непрозрачный)
  8. Выводим на экран информацию о просветах в каждой грани куба
  9. Возвращаем 0, завершая работу программы

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

12   голосов , оценка 4.25 из 5
Похожие ответы