4 条题解

  • 1
    @ 2026-9-15 12:04:50

    Python

    1.题目分析: 这题其实从题意来讲,最先想到的就是对角线上的元素,这个很规律呀 [1,1],[2,2],[3,3],[4,4]......[20,20] 2.数学分析,对角线元素3个不具有代表性,可以先画一个大大的方格(避免数据的填入有误,也方便看清),那么,前4个元素就是这个1,5,13,25 不难发现,差值为,4,8,12,这不就死妥妥的等差数列嘛 3.代码展示,我也是刚学到回溯 这题刚好可以用到

    def dfs(n):
        if n==1:
            return 1
        x = dfs(n-1)    
        res = x+4*(n-1)
        return res
    print(dfs(20))
    
    
    • 0
      @ 2024-4-12 11:25:55

      大暴力模拟法

      把这个三角形旋转45度,可以得到以下类似的三角

        1
       3 2
      4 5 6
      .....
      

      接下来暴力枚举出这个三角形

      vector<vector<i64>> vecs, ans;
      for (int i = 1, j = 1, k = 1; i <= 40; ++i, ++j) {
          vector<i64> arr;
          for (int x = 0; x < j; ++x) {
              arr.emplace_back(k++);
          }
          if (~i & 1)
              reverse(arr.begin(), arr.end());
          vecs.emplace_back(arr);
      }
      

      然后将斜线的元素转为直线储存的

      for (int x = 0; x < 40; ++x) {
          vector<i64> arr;
          for (int i = 0; i < 40; ++i) {
              if (vecs[i].empty())
                  continue;
              arr.emplace_back(vecs[i].back());
              vecs[i].pop_back();
          }
          ans.emplace_back(arr);
      }
      

      接下来直接查表即可

      参考代码

      #include <bits/stdc++.h>
      using namespace std;
      using i64 = long long;
      signed main() {
          ios::sync_with_stdio(false);
          cin.tie(nullptr);
          vector<vector<i64>> vecs, ans;
          for (int i = 1, j = 1, k = 1; i <= 40; ++i, ++j) {
              vector<i64> arr;
              for (int x = 0; x < j; ++x) {
                  arr.emplace_back(k++);
              }
              if (~i & 1)
                  reverse(arr.begin(), arr.end());
              vecs.emplace_back(arr);
          }
          for (int x = 0; x < 40; ++x) {
              vector<i64> arr;
              for (int i = 0; i < 40; ++i) {
                  if (vecs[i].empty())
                      continue;
                  arr.emplace_back(vecs[i].back());
                  vecs[i].pop_back();
              }
              ans.emplace_back(arr);
          }
          cout << ans[19][19];
          return 0;
      }
      
      • 0
        @ 2024-4-11 11:45:42

        直接观察法找规律1 5 13 25 应该是对角元素依次差一个对应次数的乘4; eg: 开始元素1 第二个:1+14=5 第三个:5+24=13 然后

        #include<bits/stdc++.h>
        using namespace std;
        int main()
        {
        	int i=1,n=4;
        	for(int j=1;j<=20;j++)
        	{
        		i+=(j*n);
        		cout<<"第"<<j+1<<"个"<<i<<endl;
        		
        	}
            return 0;
        }
        

        即可

        • 0
          @ 2024-4-9 1:20:37

          【2020年省赛B组】试题C: 蛇形填数

          题解

          规律题。

          定义,表示当前位置所在行,c表示当前位置所在列,ans 记录当前位置的数值。 那么下一个位置将会有以下六种情况:

          • r=1r = 1,c为奇数:那么下一步将会到达的位置为(r,c+1r, c +1)。
          • r=1r = 1,c为偶数:那么下一步将会到达的位置为(r+1,c1r+1, c - 1)。
          • c=1c= 1,r为偶数,那么下一步将会到达的位置为(r+1,cr+1, c)。
          • c=1c= 1,r为奇数且r1r \neq 1,那么下一步将会到达的位置为(r1,c+1r - 1, c + 1)。
          • r1r \neq 1,c1c \neq 1,r+cr + c为奇数,那么下一步将会到达的位置为(r+1,c1r + 1, c - 1)。
          • r1r \neq 1,c1c \neq 1,r+cr +c为偶数,那么下一步将会到达的位置为(r1,c+1r - 1, c +1)。 按照这 6 种情况模拟,每走一步 ans 就加 1,直到 r = 20,c= 20 时结束模拟输出 ans。 最后的答案为 761

          提交代码

          #include<bits/stdc++.h>
          using namespace std;
          signed main()
          {
              int r = 1 , c = 1 , ans = 1;
              while(r != 20 || c != 20){
                  if(r == 1){
                      if(c & 1) c ++ ;
                      else r ++ , c --;
                  }
                  else if(c == 1){
                      if(r % 2 == 0) r ++;
                      else r -- , c ++;
                  }
                  else if((r + c) % 2) r ++ , c -- ;
                  else r -- , c ++ ;
                  ans ++ ;
              }
              cout << ans << '\n';
              return 0;
          }
          
          • 1

          信息

          ID
          998
          时间
          1000ms
          内存
          256MiB
          难度
          3
          标签
          递交数
          99
          已通过
          46
          上传者