1 条题解

  • 0
    @ 2023-5-7 16:35:38
    #include <bits/stdc++.h>
    using namespace std;
    
    void sparalMat(int *array[],int n)
    {    
        int time = 0;
        int start = 1; //左上角起始点,做个补充,这个是每一个外壳,第一个起始点。
        while (time < n)
        {
            if (n-1-time==0)
            {
                array[time / 2][time / 2] = start;
            }
            for (int i = 0; i < n-1-time; ++i)
            {
                array[(time / 2)][time/2+i] = start + i;
                array[time / 2 + i][n - 1 - time / 2] = start + (n - time - 1) + i;
                array[n-1 - time / 2][n-1 - time / 2 - i] = start + 2 * (n - 1 - time) + i;
                array[n - 1 - time / 2 - i][time / 2] = start + 3 * (n - 1 - time) + i;
            }
            
            start += 4 * (n - 1 - time);
            time += 2;
        }
    }
    
    //主函数入口
    int main()
    {
        int ha = 0;
        cin >> ha;
        int **a = new int*[ha];
        for (int i = 0; i < ha; i++)   //这一块仅仅是动态内存分配,与算法无关
        {
            a[i] = new int[ha];
        }
    
        sparalMat(a, ha);
    
        for (int i = 0; i < ha; i++)
        {
            for (int j = 0; j < ha; j++)
            {
                cout << setw(3) << a[i][j];
            }
            cout << endl;
        }
        for (int i = 0; i < ha; i++)    //内存释放,我觉得有必要释放,即使是在程序结束时。
        {
            delete [] a[i];
        }
        delete[] a;
        return 0;
    }
    
    • 1

    信息

    ID
    208
    时间
    1000ms
    内存
    16MiB
    难度
    3
    标签
    递交数
    57
    已通过
    31
    上传者