阅读以下说明和C程序,回答问题。 [说明] 下面的程序用Dole Rob算法生成N阶(N为奇数)魔方阵(各行、列、对角线数字之和相等)。该算法的过程为:从1开始,按如下方法依次插入各自然数,直到N2为止。 ①在第一行的正中插入1。 ②新位

admin2012-04-11  47

问题 阅读以下说明和C程序,回答问题。
[说明]
   下面的程序用Dole Rob算法生成N阶(N为奇数)魔方阵(各行、列、对角线数字之和相等)。该算法的过程为:从1开始,按如下方法依次插入各自然数,直到N2为止。
   ①在第一行的正中插入1。
   ②新位置应当处于最近插入位置的右上方,若该位置已超出方阵的上边界,则新位置取应选列的最下一个位置;若超出右边界,则新位置取应选行的最左一个位置。
   ③若最近插入的元素是N的整数倍,则选同列的下一行位置为新位置。
   例如,3阶魔方阵如下所示:
   8  1  6
   3  5  7
   4  9  2
   [C程序]
   #include<stdio.h>
   #include<stdlib.h>
   #define SIZE  50
   main(    )
   {
     int row, col, n, value;
     int a[SIZE+1][SIZE+1];     /*不使用下标为0的元素*/
     printf("请输入要输出魔方阵的阶数n(奇数, <%d):n=", SIZE);
     scanf("%d", &n);
     if(!(n%2) || n<1 ||  (1)  ){
       printf("输入数据有误!\n");
       exit(0);
   }
   row=1; col=(n+1)/2; value=1;
   while(value<=  (2)  )  {
     a[row][col]=value;
        /*计算下一位置*/
     if(value%n!=0){
       row--;  (3)  ;
       if(row<1)row=n;
       if(col>n)  (4)  ;
     }
     else  row++;
     value=  (5)  ;
   }
   printf("\n%d阶魔方阵如下所示:\n\n", n);
   for(row=1; row<=n; row++){
     for(col=1; col<=n; col++)
       printf("%5d", a[row][col]);
       printf("\n");
     }
   }

选项

答案n>SIZE,或其等价表示 n*n col++,或++col,或col=col+1,或其等价表示 col-=n,或col=1,或其等价表示 value+1,或其等价表示

解析 程序中空(1)处判断n的合法性,n需为奇数,矩阵规模应不超过SIZE2。所以(1)处应为n>SIZE,或其等价表示。将数值填入方阵的语句为“a[row][col]=value;”,该语句在循环中,循环条件为“value<=n*n”,所以(2)处应填入“n*n”。对于3阶魔方阵,1填入第1行第2列,2填入第3行第3列,3填入第2行第1列,其余位置按照算法步骤类推。所以(3)处填入“col++”或其等价形式,(4)处填入“col=1”或“col-=n”。程序中,本次填入的数值为value的值,下一次要填入的数值为vahle加1,因此,空(5)处应填入“value+1”。
转载请注明原文地址:https://kaotiyun.com/show/XEVZ777K
0

最新回复(0)