V1ctory_W 2023-05-24 22:35 采纳率: 0%
浏览 13

二维数组传参(行列动态)

最近在做csp认证202104-2题的时候想把主函数二维数组A传递给函数B但不知到具体怎么传过去(A数组的二维都是动态的)。


#include  <bits/stdc++.h>

using namespace std;

int n,L,r,t;
int huidu(int i,int j,int r,int t,int B[][])
{
    int x1,x2,y1,y2,z,c;
    int vis=0;
    int sum=0;
    x1=i-r;x2=i+r;y1=j-r;y2=j+r;
    if(x1<0)
    {
        x1=0;
    }
    if(y1<0)
    {
        y1=0;
    }
    if(x2>n-1)
    {
        x2=n-1;
    }
    if(y2>n-1)
    {
        y2=n-1;
    }
    for(z=y1;z<=y2;z++)
    {
        for(c=x1;c<=x2;c++)
        {
            sum+=B[z][c];
            vis++;
        }
    }
    return sum/vis;
}
int main()
{
    cin>>n>>L>>r>>t;
    int A[n-1][n-1];
    int ans=0;
    int temp=0;
    for(int i=0;i<=n-1;i++)
    {
        for(int j=0;j<=n-1;j++)
        {
            cin>>A[i][j];
        }
    }
    for(int i=0;i<=n-1;i++)
    {
        for(int j=0;j<=n-1;j++)
        {
            ans=huidu(i,j,r,t,A);
            if(ans<=t)
            {
                temp++;
            }
        }
    }
    cout<<temp<<endl;
    return 0;
}
  • 写回答

2条回答 默认 最新

  • threenewbee 2023-05-24 22:41
    关注

    用指针

    int huidu(int i,int j,int r,int t,int *B)
    {
        int x1,x2,y1,y2,z,c;
        int vis=0;
        int sum=0;
        x1=i-r;x2=i+r;y1=j-r;y2=j+r;
        if(x1<0)
        {
            x1=0;
        }
        if(y1<0)
        {
            y1=0;
        }
        if(x2>n-1)
        {
            x2=n-1;
        }
        if(y2>n-1)
        {
            y2=n-1;
        }
        for(z=y1;z<=y2;z++)
        {
            for(c=x1;c<=x2;c++)
            {
                sum+=*(B+z*n+c);
                vis++;
            }
        }
        return sum/vis;
    }
    
    
    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 5月24日