matlab做一个三维矩阵

2024-12-03 14:13:35
推荐回答(1个)
回答1:

clear
tt=0;
for
nn=1:1000
%nn的上慧宽核限可以调整nn=10000时,我算出来是7条线最少
for
tt=1:100
t=0;n=0;
for
i=1:3
for
j=1:3
for
k=1:3
h=randperm(2)-1;
f(i,j,k)=h(1);
t=t+f(i,j,k);
end
end
end
tt=tt+1;
ttt(tt)=t;
if
t==13
break;
end
end
for
i=1:3
for
j=1:3
for
k=1:3
if
sum(f(i,j,:))==3|sum(f(i,j,:))==0|sum(f(:,j,k))==3|sum(f(:,j,k))==0|sum(f(i,:,k))==3|sum(f(i,:,k))==0
n=n+1;
elseif
i==2&j==2&k~=2
for
k=1:3
if
f(1,1,k)==f(2,2,k)&f(1,1,k)==f(3,3,k)
n=n+1;
elseif
f(3,1,k)==f(2,2,k)&f(3,1,k)==f(1,3,k)
n=n+1;
end
end
elseif
j==2&k==2&i~=2
for
i=1:3
if
f(i,1,1)==f(i,2,2)&f(i,1,1)==f(i,3,3)
n=n+1;
elseif
f(i,1,3)==f(i,2,2)&f(i,1,3)==f(i,3,1)
n=n+1;
end
end
elseif
i==2&k==2&j~=2
for
j=1:3
if
f(1,j,1)==f(2,j,2)&f(1,j,1)==f(3,j,3)
n=n+1;
elseif
f(3,j,1)==f(2,j,2)&f(3,j,1)==f(1,j,3)
n=n+1;
end
end
elseif
i~=2&k~=2&j~=2
if
f(i,j,k)+f(4-i,4-j,4-k)==2*f(2,2,2)
n=n+1;
end
end
end
end
end
qq(nn)=n;
g(:,:,:,nn)=f;
if
nn>1
if
qq(nn)>qq(nn-1)
g(:,:,:,nn)=g(:,:,:,nn-1);
qq(nn)=qq(nn-1);
end
end
end
qq(nn)
g(:,:,:,nn)
%这个程序应该就可以解决问题了,至于精度前掘的话,你可以通过调整巧颤nn的上限来解决。
最后输出了一个是条数,另外一组是0,1的分布,按三层描述的。