2 条题解

  • -1
    @ 2022-12-7 10:29:40

    这道题就是螺旋矩阵呀

    言归正传,这道题其实是一道基本深搜。

    重点说一下输出,它说每个数字输出时场宽设置为3,就意味着每个数字输出时占3个字符的长度,不够的空格代替。因此,每个数字输出时由 3-数字的位数个空格+数字组成。因此我们可以先求出数字的位数再根据上文公式输出。

    代码为:

    int d = 0 , x = f[i][j];//d代表数字位数,x代表当前数字(临时)
    while (x > 0)
    {
        d++;
        x /= 10;
    }
    for (int i = 1 ; i <= 3 - d ; i++) cout << " ";
    cout << f[i][j];
    

    完整代码:

    #include <bits/stdc++.h>
    using namespace std;
    int n , m , f[10][10] , b[10][10] , next[4][2] = {{0 , 1} , //遍历的顺序也很重要
                                                      {1 , 0} , 
                                                      {0 , -1} , 
                                                      {-1 , 0}};
    void dfs(int x , int y , int number)
    {
        f[x][y] = number;
        b[x][y] = 1;
        number++;
        for (int i = 0 ; i < 4 ; i++)
        {
            int nx = x + next[i][0] , ny = y + next[i][1];
            if (nx >= 1 && nx <= n && ny >= 1 && ny <= m && b[nx][ny] == 0)
            {
                return dfs(nx , ny , number);
            }
        }
        return;
    }
    
    int main()
    {
        cin >> n >> m;
        dfs(1 , 1 , 1);
        for (int i = 1 ; i <= n ; i++)
        {
            for (int j = 1 ; j <= m ; j++)
            {
                int d = 0 , x = f[i][j];
                while (x > 0)
                {
                    d++;
                    x /= 10;
                }
                for (int i = 1 ; i <= 3 - d ; i++) cout << " ";
                cout << f[i][j];
            }
            cout << endl;
        }
        return 0;
    }
    

    --------------------------------------------------UPDATD-2022.12.25-------------------------------------------------------

    设置场宽其实一句话就行了,不用我说的那么麻烦。我当时不会用printf

    printf("%3d" , f[i][j]);
    
    • -3
      @ 2022-4-24 17:47:26

      写题解请注意

      鼓励大家写题解,但注意题解格式。

      题解一定要有思路解析或代码注释,能否让别人理解你的思路

      也是你的能力的检验,不要只放无意义的代码给大家复制,那就失去了做题的初心。

      给代码两端加上这个会舒服一些

      ```cpp

      你的代码

      ```

      </span>

      这个点在键盘的左上角tab上面那个键,注意切换输入法

      #include<iostream>
      using namespace std;
      int main()
      {
          int n;
          cin>>n;//这是一个注释
          return 0;
      } 
      

      请注意严禁抄袭题解,写题解不要只放代码,需加上你的思路或代码注释。

      抄袭题解一经发现直接取消成绩。

      题解被删除的可能

      1. 代码不符合格式规范
      2. 没有思路讲解或者没有注释,
      3. 无意义的题解

      大家携手共同维护一个良好的编程环境,如果一经发现,多次作乱。可能会被管理员拉黑,请注意,一旦拉黑即失去登陆资格。

      • 1

      信息

      ID
      583
      时间
      1000ms
      内存
      128MiB
      难度
      6
      标签
      递交数
      48
      已通过
      17
      上传者