acgo题库
  • 首页
  • 题库
  • 题单
  • 竞赛
  • 讨论
  • 排行
  • 团队
  • 备赛专区

    竞赛

    • CSP-J/S
    • 蓝桥杯

    考级

    • GESP
    • CPA
    • 电子学会考级
登录
注册
题目详情题解(0)讨论(0)提交记录(0)
  • 题解

    userId_undefined

    法兰西玫瑰

    倔强青铜
    105阅读
    0回复
    7点赞
  • 【正经题解】螺旋矩阵

    考虑到它是求第 iii 行第 jjj 列的数,其实我们可以只针对第 jjj 列的数,进行填数模拟,这样时间复杂度就降到了 OOO ( NNN )了 。模拟其实也很简单,就是向右绕半圈,向左绕半圈,直到行等于 iii 时跳出就可以了。 另外,如果这样模拟,就会有一个坑点难以想到。有时候,可能绕的这半圈已经变成了一条直线了,这样这第 iii 行的数就可能在这条 直线中,则必须加一个特判,加上上一个点到终点的距离,然后就得跳出了。

    userId_undefined

    AC君

    管理员
    倔强青铜
    111阅读
    1回复
    2点赞
  • ...

    #include<bits/stdc++.h> using namespace std; int a[110][110]; int main(){ int n; cin >> n; int l = 1,r = n,cnt = n*n; while(l<=r){ for(int i = l;i<=r;i++){ a[i][r] = cnt--; } for(int i = r-1;i>=l;i--){ a[r][i] = cnt--; } for(int i = r-1;i>=l;i--){ a[i][l] = cnt--; } for(int i = l+1;i<=r-1;i++){ a[l][i] = cnt--; } l++; r--; } for(int i = 1;i<=n;i++){ for(int j = 1;j<=n;j++){ printf("%8d",a[i][j]); } cout << endl; } return 0; }

    userId_undefined

    ZDZL_A C 君.

    倔强青铜
    32阅读
    0回复
    0点赞
首页