Viết chương trình nhập vào một số tự nhiên N(N lẻ), sau đó điền các số từ 1 đến n2 vào trong bảng vuông sao cho tổng các hàng dọc, ngang và 2 đường chéo đều bằng nhau(bảng này được gọi là Ma phương)
Yêu cầu: Cho một số N hãy in ra bảng Ma phương.
Dữ liệu vào trong tập tin maphuong.inp gồm một số tự nhiên N lẻ
Dữ liệu ra trong tập tin maphuong.out in ra mảng tìm được
Ví dụ 1:
----------------------------------------
maphuong.inp
3
-----------------------------------------
maphuong.out
2 7 6
9 5 1
4 3 8
-------------------------------------------
maphuong.inp
5
--------------------------------------------
maphuong.out
3 16 9 22 15
20 8 21 14 2
7 25 13 1 19
24 12 5 18 6
11 4 17 10 23
-------------------------------------------------------------------------------------------------------------------------------------------------------
-THE END-
Uses Crt;
Var A:Array[1..20,1..20] Of Word;
n,i,j,k:Word;
Begin
Clrscr;
Write('Nhap N= '); Readln(n);
i:=n DIV 2 + 1;
j:=n DIV 2 + 2;
For k:=1 To n*n Do
Begin
A[i,j]:=k;
If k MOD n=0 Then j:=j+2 Else
Begin
j:=j+1;
i:=i-1;
End;
If j>n Then j:=j MOD n;
If i=0 Then i:=n;
End;
For i:=1 To n Do
Begin
For j:=1 To n Do write(a[i,j]:4);
Writeln;
End;
Readln
End.
uses crt;
var a:array[1..100,1..100] of integer;
n:byte;So:integer;
procedure xuat();
var i,j:byte;Tong:integer;
begin
for i:=1 to n do
begin
Tong:=0;
for j:=1 to n do
begin
Tong:=Tong+a[i,j];
write(a[i,j]:4);
end;
writeln{(' = ',Tong) };
end;
{writeln; }
end;
procedure Dienso();
var i,j:byte;
begin
i:=(n div 2)+1;j:=(n div 2)+2; so:=1;a[i,j]:=so;
repeat
if So mod n=0 then
begin
inc(so); j:=j+2; if j>n then j:=j-n; a[i,j]:=so;
end else
begin
dec(i);inc(j);inc(So);
if i=0 then
begin
i:=n;
if j>n then j:=1;
a[i,j]:=So;
end
else if j>n then
begin
j:=1;
a[i,j]:=So;
end
else a[i,j]:=So;
end;
until so=n*n;
end;
begin clrscr;
repeat
readln(n);
until odd(n);
if n=1 then write(1)
else
begin
Dienso;
xuat;
end;
readln
end.
Tac gia mnhaohiep :333
{Mình chỉ nhập n. Không mở file đóng file}
program bai1;
uses crt;
var i,j,n,x,y:integer;
a:array[0..100,0..100] of integer;
f,g:text;
procedure dequy;
begin
if i=n*n then exit;
if(x>1)and(y<n)and(a[x-1,y+1]=0)and(i<n*n)then
begin
x:=x-1;
y:=y+1;
i:=i+1;
a[x,y]:=i;
dequy;
end;
if(y=n)and(x>1)and(i<n*n)then
begin
x:=x-1;y:=1;i:=i+1;a[x,y]:=i;dequy;
end;
if(x=1)and(i mod n<>0)and(i<n*n)then
begin
x:=n;y:=y+1;i:=i+1;a[x,y]:=i;dequy;
end;
if(i mod n=0)and(i<n*n)then
begin
if(y+2<=n)then
begin
y:=y+2;
i:=i+1;
a[x,y]:=i;
dequy;
end
else
begin
y:=(y+2)-n;
i:=i+1;
a[x,y]:=i;
dequy;
end;
end;
end;
begin
assign(f,'maphuong.inp');reset(f);
assign(g,'maphuong.out');rewrite(g);
readln(f,n);
x:=n div 2+1;y:=n-n div 2+1;i:=1;
a[x,y]:=1;
dequy;
for i:=1 to n do
begin
for j:=1 to n do
write(g,a[i,j]:3);
writeln(g);
end;
close(f);
close(g);
end.