第二题(必须利用二维数组当函数参数。输入部分在主函数,计算部分为函数,二维数组通过参数传入)

给出一个n行m列的矩阵,矩阵的每个位置有一个非负整数a[i][j],有q次询问,每次询问求一个左上角为(a,b),右下角为(c,d)的子矩阵的所有数之和。
输入
第一行两个整数n,m,表示矩阵的行和列的大小
接下来n行每行m个整数,为矩阵内容
接下来一行为一个整数q,表示询问次数
接下来q行每行4个整数a,b,c,d,含义见题面。
输出
共q行,第i行为第i个询问的答案。


#include <iostream>

using namespace std;
int n,m,a,b,c,d;
void alter(int **arr,int ,int);

int main()
{

    cin>>n>>m;
    //cout<<n<<" "<<m<<endl;
    int **arr = new int*[n];
    for (int i = 0; i < n; i++)
    {
        arr[i] = new int[m];
    }
    for(int i=0;i<n;i++){
        for(int j=0;j<m;j++)
            cin>>arr[i][j];
    }
//    for(int i=0;i<n;i++){
//        for(int j=0;j<m;j++)
//            cout<<arr[i][j]<<" ";
//        cout<<endl;
//    }
    int q;
    cin>>q;
    for(int i=1;i<=q;i++){
        cin>>a>>b>>c>>d;
        alter(arr,n,m);
        //cout<<a<<" "<<b<<" "<<c<<" "<<d<<endl;
    }
 for (int i = 0; i < n; i++)
    {
        delete[] arr[i];
    }
    delete[] arr;
    return 0;
}
void alter(int **arr,int n,int m)
{
    int sum=0;
    for(int i=a-1;i<c;i++){
        for(int j=b-1;j<d;j++)
            sum+=arr[i][j];
    }
    cout<<sum;
}