Куб состоит из n3 прозрачных и непрозрачных элементарных кубиков. Есть ли хоть один просвет по каждому из трех измерений? Если так, вывести координаты - C (СИ)
Формулировка задачи:
Куб состоит из n3 прозрачных и непрозрачных элементарных кубиков. Есть ли хоть один просвет по каждому из трех измерений? Если так, вывести координаты каждого просвета заранее спасибо
Решение задачи: «Куб состоит из n3 прозрачных и непрозрачных элементарных кубиков. Есть ли хоть один просвет по каждому из трех измерений? Если так, вывести координаты»
textual
Листинг программы
// Kubik.cpp: определяет точку входа для консольного приложения.
//
#include "stdafx.h"
#include <stdio.h>
#include <conio.h>
int _tmain(int argc, _TCHAR* argv[])
{
int m[1000][1000];
int i, j, k;
int a, b, c;
int n;
printf("Input n\n");
scanf("%d", &n);
for (i = 0; i < n; i++)
for (j = 0; j < n*n; j++)
{
scanf("%d", &m[i][j]);
}
//1. Начинаем поиск просветов по координате х
for (i = 0; i < n; i++)
for (a = 0; a < n; a++)
{
k = 0;
for (b = 0; b < n; b++)
{
if (m[i][a*n+b] == 0) k+=1;
if (k == n) printf("Found clearance. Coordinates x = 1 - %d; y = %d; z = %d\n", n, a+1, i+1);
}
}
//2. Начинаем поиск просветов по координате z
for (i = 0; i< n*n; i++)
{
k = 0;
for (j = 0; j < n; j++)
{
if ( m[j][i] == 0 ) k+=1;
if ( k == n ) printf("Found clearance. Coordinates x = %d; y = %d; z = 1 - %d\n", j, i/n+1, n);
}
}
//3. Начинаем поиск просвета по координате y
for (i = 0; i<n; i++)
for (j = 0; j < n; j++)
{
if ( m[i][j] == 0 )
{
k = 1;
for (a = 0; a < n-1; a++)
{
if (m[i][j+a] == 0) k+=1;
}
if (k == n) printf("Found clearance. Coordinates x = %d; y = 1 - %d; z = %d\n", j+1, n, i+1);
}
}
getch();
return 0;
}
Объяснение кода листинга программы
В этом коде реализуется алгоритм поиска просветов (прозрачных элементарных кубиков) в кубе, состоящем из n3 элементарных кубиков. Просветы ищются по каждой из трех осей координат (x, y, z). Список действий:
- Пользователю предлагается ввести значение переменной n (размер куба).
- Далее следует заполнение матрицы m значениями, которые определяют, является ли элемент куба прозрачным (0) или непрозрачным (не 0).
- Затем начинается поиск просветов по координате х. Для каждого значения х от 0 до n-1 перебираются все элементы матрицы m[i][a*n+b], где a - произвольное значение от 0 до n-1. Если элемент равен 0, то увеличивается счетчик k, и если k достигает значения n, то выводится сообщение о нахождении просвета с соответствующими координатами.
- После этого начинается поиск просветов по координате z. Для каждого значения z от 0 до n*n-1 перебираются все элементы матрицы m[j][i], где j - произвольное значение от 0 до n-1. Если элемент равен 0, то увеличивается счетчик k, и если k достигает значения n, то выводится сообщение о нахождении просвета с соответствующими координатами.
- Наконец, начинается поиск просветов по координате y. Для каждого значения y от 0 до n-1 перебираются все элементы матрицы m[i][j]. Если элемент равен 0, то увеличивается счетчик k, и если k достигает значения n, то выводится сообщение о нахождении просвета с соответствующими координатами.
- В конце программы пользователю предлагается нажать любую клавишу для выхода. Если в процессе выполнения программы ни одного просвета не найдено, то выводится сообщение об отсутствии просветов.