将1-9九个数字填入组成三阶幻方,打印所有填法,求算法及其PASCAL程序。

FARKY 2001-10-30 07:57:52
将1-9九个数字填入3X3的方格内,组成三阶幻方,打印所有填法,求算法及其PASCAL程序。
...全文
616 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
lxp981818 2001-11-01
  • 打赏
  • 举报
回复
for(int a1=1;ai<=9;a1++)
for(int a2=1;ai<=9;a2++)
if(a1!=a2)
for(int a3=1;ai<=9;a3++)
if(a3!=a1&&a3!=a2)
…………
printf()//按格式输出即可
andrew80 2001-10-31
  • 打赏
  • 举报
回复
给你个能算任意阶的:
构造任意阶幻方的Pascal源程序

program MagicSquare;
const
n=100;
type
arr=array [1..n] of integer;
var
m,dgr,i,j,k,qut,half,tint:integer;
a,temp:array [1..n] of arr;
item1,item2:arr;
begin
writeln('Please enter the degree');
read(dgr);
if odd(dgr) {奇数阶幻方的劳伯尔法}
then begin
i:=1;
j:=(dgr+1) div 2; {设定起始位置}
for m:=1 to dgr*dgr do {填数}
begin
a[i,j]:=m;
if m mod dgr = 0 {右上对角有元素}
then i:=i+1
else begin {右上角没有元素}
i:=((dgr+i-2) mod dgr)+1;
j:=(j mod dgr)+1;
end;
end;
for i:=1 to dgr do {输出}
begin
for j:=1 to dgr do
write(a[i,j]:5);
writeln;
end;
readln;
end
else if odd(dgr div 2) {单偶阶幻方的斯特拉兹法}
then begin
m:=(dgr-2) div 4;
qut:=dgr*dgr div 4;
half:=dgr div 2;
i:=1; {用劳伯尔方法构造A部分}
j:=m+1;
for k:=1 to qut do
begin
a[i,j]:=k;
if k mod half = 0
then i:=i+1
else begin
i:=((half+i-2) mod half)+1;
j:=(j mod half)+1;
end;
end;
i:=half+1; {用劳伯尔方法构造B部分}
j:=half+m+1;
for k:=qut+1 to qut*2 do
begin
a[i,j]:=k;
if k mod half = 0
then i:=i+1
else begin
i:=half + ((half+i-2) mod half)+1;
j:=half + (j mod half)+1;
end;
end;
i:=1; {用劳伯尔方法构造C部分}
j:=half+m+1;
for k:=qut*2+1 to qut*3 do
begin
a[i,j]:=k;
if k mod half = 0
then i:=i+1
else begin
i:=((half+i-2) mod half)+1;
j:=half + (j mod half)+1;
end;
end;
i:=half+1; {用劳伯尔方法构造D部分}
j:=m+1;
for k:=qut*3+1 to qut*4 do
begin
a[i,j]:=k;
if k mod half = 0
then i:=i+1
else begin
i:=half + ((half+i-2) mod half)+1;
j:=(j mod half)+1;
end;
end;
for i:=1 to half do {交换A与D左侧边缘的m个格子}
for j:=1 to m do
if i <> m+1
then begin
tint:=a[i,j];
a[i,j]:=a[i+half,j];
a[i+half,j]:=tint;
end;
for j:=m+1 to 2*m do {交换A与D中间行的m个格子}
begin
tint:=a[m+1,j];
a[m+1,j]:=a[half+m+1,j];
a[half+m+1,j]:=tint;
end;
for j:=dgr downto dgr-m+2 do {交换B与C的右侧边缘的m-1列}
for i:=1 to half do
begin
tint:=a[i,j];
a[i,j]:=a[i+half,j];
a[i+half,j]:=tint;
end;
for i:=1 to dgr do {输出}
begin
for j:=1 to dgr do
write(a[i,j]:5);
writeln;
end;
end
else begin {双偶阶幻方的海尔法}
for i:=1 to dgr do {设定A与A′}
begin
item1[i]:=i;
item2[i]:=dgr+1-i;
end;
for i:=1 to (dgr div 2) do {填D1的上半部分}
if odd(i)
then a[i]:=item1
else a[i]:=item2;
for i:=dgr downto (dgr div 2 + 1) do {下半部分}
if odd(i)
then a[i]:=item2
else a[i]:=item1;
for i:=1 to dgr do{构造根数方阵并与初始方阵相加}
for j:=1 to dgr do
temp[i,j]:=(a[j,i]-1)*dgr+a[i,j];
for i:=1 to dgr do {输出}
begin
for j:=1 to dgr do
write(temp[i,j]:3,' ');
writeln;
end;
readln;
end;
end.

33,008

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧