一道矩阵输出题

来源:互联网 发布:c语言输出九九乘法表 编辑:程序博客网 时间:2024/06/05 18:28


在论坛上看到有人提出这么一个问题,输入数字n,输出对应的矩阵。例如,

输入:1

输出:1

输入:2

输出:1     2

            4     3

输入3:

输出:7     8     9

            6     1     2

            5     4     3

要求:尽可能占用较少空间,时间复杂度尽量低,且对于n较大时(如:n=1000000000)仍然正确快速输出。

我的解答如下:

#include<iostream>using namespace std;#define max(x,y) ((x)>(y)?(x):(y))#define abs(x) ((x>0)?(x):-(x))int main() {        long n;        cin>>n;        long x,y,m;        for (y=(n+1)/2-1;y>=-n/2;y--) {                for (x=-(n+1)/2+1;x<=n/2;x++) {                        m = 2*max(abs(x),abs(y)) + 1;                        if (x>y && x+y>=0) {                                cout<<(m*m-3*m+3-(x+y))<<'\t';                        } else if (y>=x && x+y>0) {                                cout<<(m*m-(y-x))<<'\t';                        } else if (x<y && x+y<=0) {                                cout<<(m*m-m+1+(x+y))<<'\t';                        } else if (y<=x && x+y<=0) {                                cout<<(m*m-2*m+2-(x-y))<<'\t';                        }                }                cout<<endl;        }}

具体算法思想,会在接下来有空的时候详细解析。