IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> "прозрачные и непрозрачные кубики"
-azi-
сообщение 31.05.2005 8:43
Сообщение #1


Гость






Помогите с алгоритмом решения:
1.Куб состоит из n3 прозрачных и непрозрачных элементарных кубиков. Построить полностью непрозрачный куб, используя ровно n2 непрозрачных элементарных кубиков.
2.Поле размером m×n заполнено прозрачными и непрозрачными кубиками. Найти все столбцы поля, все непрозрачные кубики которых невидимы для наблюдателя, расположен-ного слева.
 К началу страницы 
+ Ответить 
hiv
сообщение 31.05.2005 12:41
Сообщение #2


Профи
****

Группа: Пользователи
Сообщений: 660
Пол: Мужской
Реальное имя: Михаил

Репутация: -  11  +


Вот простой и тупой перебор всех вариантов (сочетаний n*n из n*n*n элементарных кубиков)
program KUB;

var soch : array [1..100] of longint;
n,i,j,n2,n3 :longint;

procedure write_soch; {выводим решение на экран}
var i,x,y,z,l :longint;
begin
writeln('Решение:');
writeln(' X Y Z');
for i:=1 to n2 do
begin
l:=soch[i]-1;
z:=l div n2;
l:=l mod n2;
y:=l div n;
x:=l mod n;
writeln((x+1):6,(y+1):6,(z+1):6);
end;
end;

{переводим трехмерные координаты в одномерные}
function translate(x,y,z:longint):longint;
begin
translate:=(z-1)*n2+(y-1)*n+(x-1)+1;
end;

{определяем есть ли такая координата в сочетании}
function inside(i:longint):boolean;
var j :longint;
res :boolean;
begin
j:=0;
repeat
inc(j);
res:=(i=soch[j]);
until (j>=n2)or res;
inside:=res;
end;

{проверяем куб на непрозрачность}
function Test:boolean;
var x,y,z :longint;
res,boy :boolean;
begin
res:=true;

z:=1;
while (z<=n)and res do
begin
y:=1;
while (y<=n)and res do
begin
boy:=false;
for x:=1 to n do boy:=boy or inside(translate(x,y,z));
res:=boy;
inc(y);
end;
inc(z);
end;

z:=1;
while (z<=n)and res do
begin
x:=1;
while (x<=n)and res do
begin
boy:=false;
for y:=1 to n do boy:=boy or inside(translate(x,y,z));
res:=boy;
inc(x);
end;
inc(z);
end;

x:=1;
while (x<=n)and res do
begin
y:=1;
while (y<=n)and res do
begin
boy:=false;
for z:=1 to n do boy:=boy or inside(translate(x,y,z));
res:=boy;
inc(y);
end;
inc(x);
end;
Test:=res;
end;

begin
write('N='); readln(n);
n2:=n*n;
n3:=n2*n;
for i:=1 to n2 do soch[i]:=i; {задаем первое сочетание}
if Test then write_soch; {проверяем его}

i:=n2;
while i>0 do
begin
i:=n2;
while (i>0)and(soch[i]=(n3-n2+i)) do dec(i);
if i>0 then
begin
inc(soch[i]);
for j:=i+1 To n2 Do soch[j]:=soch[j - 1] + 1;
{проверяем следующее сочетание}
if Test then write_soch;
end;
end;

end.


--------------------
Никогда не жадничай. Свои проблемы с любовью дари людям!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
azi
сообщение 31.05.2005 18:01
Сообщение #3


Новичок
*

Группа: Пользователи
Сообщений: 10
Пол: Мужской

Репутация: -  0  +


Спасибо огромное
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 17.07.2025 0:46
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"