pascal二维数组(要思路)
当n=5时 输出:1 2 3 4 5
10 9 8 7 6
11 12 13 14 15
20 19 18 17 16
21 22 23 24 25 展开
对于这题,有两种思路:
在二维数组中顺序存放数据,而在输出时动一下脑筋;
存放数据时已经按照题目中要求的顺序,然后直接输出。
下面,对于第一种思路进行讲解。
先附上代码:
var a:array[1..100,1..100]of longint; //这是估计的数据范围;
i,j,s,n:longint;
begin
readln(n);
for i:=1 to n do
for j:=1 to n do
begin
inc(s);
a[i,j]:=s;
end; //这部分是读入,不用考虑什么“要转个弯读入”啊之类的;
for i:=1 to n do
begin
if odd(i) then for j:=1 to n do write(a[i,j],' ')
else for j:=n downto 1 do write(a[i,j],' ');
writeln;
end; //这部分是输出,只要考虑是奇数行还是偶数行就行了;
readln;
end.
在所有数据都读入之后,比如当n=5,此时的二维数组内是这个样子:
1 2 3 4 5
6 7 8 9 10
11 12 13 14 15
16 17 18 19 20
21 22 23 24 25
然后在输出时用一点技巧吧,注意到,如果是奇数行(即 if odd(i) ,odd(n) 表示判断n是否是奇数),就从左往右输出,偶数行就从右往左输出,因此输出语句是上面那一段。
这一个例子还真没有把题目描述清楚。请从下面的题目选择一个
输出n行n列,第一个元素为1。往后递增。
输出n行5列,其中第一元素为1。往后递增。
输出5行n列,其中第一个元素为1,往后递增。
……
在此我先选择(或者说假设)是题1。
主要代码(主要是示意,非完整)
for i:=0 to n-1 do
begin
for j:=1 to n-1 do
write(i*n+j,' ');
writeln(i*n+n);
end;
解释:
依据题1及样例。数学好的人能马上敏锐的觉察到每一个元素的值与其所在的行及列的关系是一定的(这里视n为常量,因为,输入后,n值是具体一定的)
且极易发现及证明
值=(行-1)*n+列
不好意思
他的程序比较详细