6 条题解

  • 5
    @ 2023-10-24 19:32:42

    一篇VERY多余的题解

    画草图后(图略),可得如下表格:(注意不要把分割区域的数量数错,否则你会像我一样感到迷茫的。。)

    表格中,a 数组用于存储 当平面内有 n 条直线,且其中 m 条(原题目为 q 条,代码是我上课写的,懒得修改了)直线相交于同一点,则这 n 条直线最多能将平面分割成不同区域的数量; n 对应表格的列,表示 平面内直线的数量为 n 条; m 对应表格的行,表示 n 条直线中有 m 条直线相交于同一点

    a[n][m] 1 2 3 4 5 6 ...
    1 2 / / / / / ...
    2 3 4
    3 4 7 6
    4 5 11 10 8
    5 6 16 15 13 10
    6 7 22 21 19 16 12
    ... ...

    观察表格,得出以下结论:

    • m=1:a[n][m] = n+1;
    • m=n:a[n][m] = n*2;
    • 1<m<n:a[n][m] = a[n-1][1]+a[n-1][m];

    进行整理,编写代码:

    #include<cstdio>
    using namespace std;
    
    int main(){
        int n, m;
        scanf("%d%d", &n, &m);
    
        int const cn=n+1;
        int a[cn][cn]={};
    
        for(int i=1; i<=n; i++){
            a[i][1] = i+1;
            a[i][i] = i*2;
            for(int j=2; j<i; j++){
                a[i][j] = a[i-1][1]+a[i-1][j];
            }
        }
    
        printf("%d\n", a[n][m]);
    
        return 0;
    }
    
    • 3
      @ 2023-7-28 20:21:15
      #include<cstdio>
      using namespace std;
      int x,y,a,b,c=0,d=1;
      int main()
      {
      scanf("%d%d",&x,&y);
      for(int i=1;i<=y-2;i++) c+=i;
      for(int i=1;i<=x;i++) d+=i;
      printf("%d",d-c);
      return 0;
      }
      
      • 2
        @ 2023-7-28 19:25:04

        代码比较冗长,若有改进意见请各位神犇指出

        #include <bits/stdc++.h>
        using namespace std;
        int n,k,a[500],b[500];
        int main()
        {
            scanf("%d%d",&n,&k);
            a[1]=2;a[2]=4;
            for(int i=3;i<=n;i++)
                a[i]=a[i-1]+i;
            b[2]=0;b[3]=1;
            for(int i=4;i<=k;i++)
                b[i]=b[i-1]+b[i-1]-b[i-2]+1;
            printf("%d",a[n]-b[k]);
            return 0;
        }
        
        • @ 2023-7-28 20:20:01

          #include using namespace std; int x,y,a,b,c=0,d=1; int main() { scanf("%d%d",&x,&y); for(int i=1;i<=y-2;i++) c+=i; for(int i=1;i<=x;i++) d+=i; printf("%d",d-c); return 0; }

        • @ 2023-7-28 20:37:04

          @👍 😄

      • 2
        @ 2022-11-9 17:23:59

        f(x)=2*x;(x<=p) f(x)=f(x-1)+x;(x>p);

        • 2
          @ 2022-11-7 13:11:28

          自己画一下图可得 有p条直线交于一点的话,就有2p个区域 剩下的从i=p+1到i<=n条每多一条会增加i个区域

          • -2
            @ 2024-1-17 17:57:51
            #include<bits/stdc++.h>
            using namespace std;
            int main()
            {
            int n,p,s=0;
            cin>>n>>p;
            for(int i=p+1;i<=n;i++)
            s+=i;
            cout<<2*p+s;
            return 0;
            }
            
            • 1

            信息

            ID
            404
            时间
            1000ms
            内存
            256MiB
            难度
            4
            标签
            递交数
            85
            已通过
            40
            上传者