问答题 完善下列程序,每小题在Pascal语言(a)和C语言(b)中任选一题。下面的程序将数列1,2,3,…,n*n依次按蛇型方式存放在二维数组A[1.n,1.n]中(示意图编者略)。#deflne NMAX 10 #include“stdio.h” main() {int i,J,n,k,P,q,m; int a[NMAX][NMAX]; scanf(“%d”,&n); m=1; for(k=1 i(1) ; k++) {if(k
【正确答案】正确答案:本题要求将1,2,…,n*n个自然数,按蛇形方式存放在二位数组A[n][n]中。“蛇形”方式,即是按“副对角线”平行的各对角线,从左下到右上,再从右上到左下,存放n2个整数。对角线共2,2一1条,在副对角线上方的对角线,题目中用k表示第k条对角线(最左上角k=1),数组元素的x和y方向坐标之和为k+1(即题目中的i+j=k+1)。副对角线下方第k条对角线与第2n—k条对角线对称,其元素的下标等于其对称元素的相应坐标各加(k-n)。 (1)k<=2*n一1 //共填2*n一1条对角线 (2)q=2*n—k //副对角线以下的各条对角线上的元素数 (3)k%2!=0 //k为偶数时从右上到左下,否则从左下向右上填数(本处计算下标i和j) (4)k>=n //修改副对角线下方的下标i和j (5)m++;或m=m+1 //为填下个数作准备,m变化范围1..n*n 本题解法的另一种思路见本章算法设计题第9题。
【答案解析】