主题:toj1019--NOIP96普及组的试题
YJFOX
[专家分:4430] 发布于 2005-08-31 20:42:00
输入三个自然数,n,i,j(n<=10,1<=i<=n,1<=j<=n).n表示有一个n行n列的棋盘格子,(i,j)表示棋盘中格子的位置
如:n=4,i=2,j=3表示了棋盘中的第二行第三列的格子
要求编制一个程序,根据输入的n,i,j的值,输出与格子(i,j)在同一行、同一列、同一对角线上的所有格子位置.
例如:当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) {左下到右上对角线上的格子位置}
同一行和同一列的实现都很简单,但是斜向的输出就很难想了,不知道大家有什么好的建议或方法
回复列表 (共4个回复)
沙发
AlexLa [专家分:60] 发布于 2005-09-01 21:04:00
从I,J出发同加或同减一,或加一减一……
板凳
绿步甲 [专家分:1610] 发布于 2006-04-17 18:53:00
偶这个为什么错呀
var
n,p,q,i,j:longint;
begin
assign(input,'s.in');
reset(input);
assign(output,'s.txt');
rewrite(output);
while not seekeof (input) do
begin
i:=0;j:=0;
readln(n,p,q);
for i:=1 to n do
write('(',p,',',i,')');
writeln;
for i:=1 to n do
write('(',i,',',q,')');
writeln;
i:=p;j:=q;
while not((i=1)or(j=1))do
begin
i:=i-1;
j:=j-1;
write('(',i,',',j,')');
end;
write('(',p,',',q,')');
i:=p;j:=q;
while not((i=n)or(j=n)) do
begin
i:=i+1;
j:=j+1;
write('(',i,',',j,')');
end;
writeln;
i:=p;
j:=q;
while not((i=n)or(j=1)) do
begin
i:=i+1;
j:=j-1;
end;
write('(',i,',',j,')');
while not((i=1)or(j=n)) do
begin
i:=i-1;
3 楼
bixuan [专家分:100] 发布于 2006-05-06 11:30:00
注意观察斜线的坐标的特点,一般来说从从左上到右下的坐标都有这样的特点,即
纵坐标+坐标=i+j 从左下到右上 |纵坐标-横坐标|=|j-i|
4 楼
tcdkz [专家分:210] 发布于 2006-08-15 20:43:00
我的程序:
program ex;
var
n,i,j,k:integer;
begin
readln(n,i,j);
for k:=1 to n do
write('(',i,',',k,')',' ');
writeln;
for k:=1 to n do
write('(',k,',',j,')',' ');
writeln;
if i<j then begin
for k:=1 to n do
if k+j-i<=n then
write('(',k,',',k+j-i,')',' ');
end
else
for k:=1 to n do
if k-i+j>=1 then
write('(',k,',',k-i+j,')',' ');
writeln;
for k:=n downto 1 do
if (i+j-k>=1)and(i+j-k<=n) then
write('(',k,',',i+j-k,')',' ');
writeln;
end.
[em2]
我来回复