一小题

来源:互联网 发布:淘宝追加评论规则 编辑:程序博客网 时间:2024/06/15 01:30

打印 如下形式 的矩阵;
n=5:

1   2   9 10 25
4   3   8 11 24
    7 12 23
16 15 14 13 22
17 18 19 20 21

n=6:
1   2   9 10 25 26
4   3   8 11 24 27
5   6   7 12 23 28
16 15 14 13 22 29
17 18 19 20 21 30
36 35 34 33 32 31

--------------------------------------------------------------------

解题思路:

1. 假设数组的编号从1开始

2. 则对角线上的元素值为: a[i][i]= i*i-i+1;

    如果i为奇数,则a[i][i]上方的元素依次递增,左侧元素依次递减;

    如果i为偶数,则a[i][i]上方的元素依次递减,左侧元素依次递增;

 

优化后的代码:

Cpp代码
  1. int compute(int i,int j)  
  2. {  
  3.     int max = i>j?i:j;  
  4.     if (max%2)  
  5.         return max*max -max +1 -(i-j);  
  6.     else  
  7.         return max*max -max +1 +(i-j);   
  8. }  
  9.   
  10. void printMatrix2(int n)  
  11. {  
  12.     for(int i=1;i<=n;i++)  
  13.     {  
  14.         for (int j=1;j<=n;j++)  
  15.         {  
  16.             printf("%2d ", compute(i,j));  
  17.         }  
  18.         printf("\n");  
  19.     }  
  20.       
  21. }  
  22.   
  23. int main(int argc, char* argv[])  
  24. {  
  25.     printMatrix2(6);  
  26.     return 0;  

0 0
原创粉丝点击