求一pascal程序,老鸟费费时间,普通人动动脑筋,初学者慎入。。。

2025-06-27 11:34:49
推荐回答(1个)
回答1:

uses crt;
const N=10;
var i,j,x,y,num,t:integer;
a:array[1..10,1..10] of integer;
b:array[1..10,1..10] of boolean;
f:boolean;

procedure print(t:integer);
var i,j:integer;
begin
writeln(t,'turn');
for i:=1 to N do
begin
for j:=1 to N do
begin
if a[i,j]<>0 then
textcolor(4)
else
textcolor(15);
write(a[i,j]);
end;
writeln;
end;
end;

procedure jian;
var i,j,k:integer;
c:array[1..10,1..10] of boolean;
begin
fillchar(c,sizeof(c),true);
for i:=1 to N do
for j:=1 to N do
if (a[i,j]<>0) and c[i,j] then
begin
a[i,j]:=a[i,j]-1;
if a[i,j]=1 then
for k:=1 to N do
begin
a[i,k]:=1;a[k,j]:=1;
b[i,k]:=false;b[k,j]:=false;
c[i,k]:=false;c[k,j]:=false;
end;
end;
end;

function isok:boolean;
var flag:boolean;
i,j:integer;
begin
flag:=true;
for i:=1 to N do
begin
for j:=1 to N do
if a[i,j]<>0 then begin flag:=false;break;end;
if flag=false then break;
end;
isok:=flag;
end;

begin
randomize;
t:=0;
fillchar(b,sizeof(b),true);
readln(num);
x:=random(N)+1;
y:=random(N)+1;
a[x,y]:=6;
i:=1;
while(not isok) do
begin
t:=t+1;
print(t);
jian;
if i begin
x:=random(N)+1;
y:=random(N)+1;
while a[x,y]<>0 do
begin
x:=random(N)+1;
y:=random(N)+1;
end;
a[x,y]:=6;
i:=i+1;
end;
end;
f:=true;
for i:=1 to N do
for j:=1 to N do
if b[i,j]=true then begin writeln(i,' ',j); f:=false; end;

if f then writeln('no');

end.