PASCAL NOIP1996普及组复赛第二题

2.输入三个自然数N,i,j(1<=i<=N,1<=j<=N),输出在一个N*N格的棋盘中,与格子(i,j)同行、同列、同一对角线的所有格子的位置。(20分)如:n=4,... 2.输入三个自然数N,i,j (1<=i<=N,1<=j<=N),输出在一个N*N格的棋盘中,与格子(i,j)同行、同列、同一对角线的所有格子的位置。(20分)

如:n=4,i=2,j=3表示了棋盘中的第二行第三列的格子,如下图:
第1行
第2行
第3行
第4行
第一列 第二列 第三列 第四列

(2,3)

当n=4,i=2,j=3时,输出的结果是:
(2,1) (2,2) (2,3) (2,4) {同一行上格子的位置}
(1,3) (2,3) (3,3) (4,3) {同列列上格子的位置}
(1,2) (2,3) (3,4) {左上到右下对角线上的格子的位置}
(4,1) (3,2) (2,3) (1,4) {左下到右上对角线上的格子的位置}

求源程序,最好讲解一下输出的第3,4行怎么来的,用PASCAL语言,谢谢了!
错了:求源程序,最好讲解一下输出的第3,4行怎么求,用PASCAL语言,谢谢了!
展开
 我来答
背对胸抱抱
2011-08-10
知道答主
回答量:11
采纳率:0%
帮助的人:15.5万
展开全部
program t1;
var i,j,k,l,m,n,x,y,i1:longint;
a:array[1..10000,1..2] of longint;

procedure qsort(l,r:longint);
var i,j,x,t:longint;
begin
i:=l;
j:=r;
x:=a[(i+j) div 2,1];
repeat
while x>a[i,1] do i:=i+1;
while x<a[j,1] do j:=j-1;
if i<=j then
begin
t:=a[j,1];
a[j,1]:=a[i,1];
a[i,1]:=t;
t:=a[j,2];
a[j,2]:=a[i,2];
a[i,2]:=t;
i:=i+1;
j:=j-1;
end;
until i>j;
if i<r then qsort(i,r);
if l<j then qsort(l,j);
end;

begin
readln(n,i,j);
for x:=1 to n do
write('(',i,',',x,')');{同一行上格子的位置}
writeln;
for y:=1 to n do
write('(',y,',',j,')');{同列列上格子的位置}
writeln;

{左上到右下对角线上的格子的位置}

k:=1;
x:=i;
y:=j;
a[k,1]:=x; a[k,2]:=y;
while (x+1<=n) and (y+1<=n) do
begin
x:=x+1;
y:=y+1;
k:=k+1;
a[k,1]:=x;
a[k,2]:=y;
end;
x:=i;
y:=j;
while (x-1>=1) and (y-1>=1) do
begin
x:=x-1;
y:=y-1;
k:=k+1;
a[k,1]:=x;
a[k,2]:=y;
end;
qsort(1,k);
for i1:=1 to k do
write('(',a[i1,1],',',a[i1,2],')');
writeln;

{左下到右上对角线上的格子的位置}

k:=1;
x:=i;
y:=j;
a[k,1]:=x; a[k,2]:=y;
while (x+1<=n) and (y-1>=1) do
begin
x:=x+1;
y:=y-1;
k:=k+1;
a[k,1]:=x;
a[k,2]:=y;
end;
x:=i;
y:=j;
while (x-1>=1) and (y+1<=n) do
begin
x:=x-1;
y:=y+1;
k:=k+1;
a[k,1]:=x;
a[k,2]:=y;
end;
qsort(1,k);
for i1:=k downto 1 do
write('(',a[i1,1],',',a[i1,2],')');
writeln;
end.

望采纳
alexandrap
2011-08-09 · TA获得超过572个赞
知道小有建树答主
回答量:289
采纳率:0%
帮助的人:238万
展开全部
左上到右下从大到小枚举坐标差相等的
左下到右上从小到大枚举坐标和相等的~
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式