主题:有趣的题目
			
 sandqqlei
				 [专家分:0]  发布于 2006-07-13 11:37:00							
			将数字1,2,3,.....,n*n个数填入蛇型方阵如当n=3时方阵如下: 
1 3 4 
2 5 8 
6 7 9 
当n=4时方阵如下: 
1 3 4 10 
2 5 9 11 
6 8 12 15 
7 13 14 16 
答对有奖!!
						
					 
		
			
回复列表 (共3个回复)
		
								
				沙发
				
					
贺天行宝 [专家分:2300]  发布于 2006-07-13 20:39:00				
				没怎么有趣啊。。。。。。
你每次做四个操作就行了阿
							 
						
				板凳
				
					
lecher [专家分:70]  发布于 2006-07-14 12:04:00				
				可以直接的看出,蛇行数列在位于奇数的斜列上是向右上方递减的,位于偶数的斜列上是向右上放递增的。限定好条件,不让数列越界,可以从左边开始向右上方搜索。用a[1..n,1..n]来装数列,对于数组元素a[i,j]来说,只要不越界就有:
if j mod 2 = 0 
 then a[i-1,j-1]:=a[i,j]+1
 else a[i-1,j-1]:=a[i,j]-1;
							 
						
				3 楼
				
					
abcwuhang [专家分:1840]  发布于 2006-10-29 18:17:00				
				var a:array[1..20,1..20] of integer;
    n,x,y,i,j,k,ii:integer;
begin
  writeln('input n:');
  readln(n);
  fillchar(a,sizeof(a),0);
  i:=0;x:=1;y:=1;k:=1;j:=1;
  while i<>n*n do
  begin
    for ii:=1 to k do
    begin
      if ii>1 then
      begin
        x:=x+j;
        y:=y-j;
      end;
      inc(i);
      a[x,y]:=i;
    end;
    if j=-1 then inc(y) else inc(x);
    j:=-j;
    if y>n then begin y:=n;x:=x+1;end;
    if x>n then begin x:=n;y:=y+1;end;
    if x+y<=n+1 then inc(k) else dec(k);
  end;
  for i:=1 to n do
  begin
    for j:=1 to n do
      write(a[i,j]:4);
    writeln;
  end;
  readln;
end.
加分啦~~
							 
									
			
我来回复