前缀和与二维数组做函数形参

#include<iostream>
using namespace std;
const int N = 10;
int q[N][N], s[N][N], n, k;
int maxx(int s[10][10], int q[10][10], int n, int k)
{
    int result = 0;
    for (int i = 0; i <= n - k; i++)
        for (int j = 0; j <= n - k; j++)
        {
            int x = k + i - 1, y = k + j - 1;
            int ans = s[y][x] - s[y][i - 1] - s[j - 1][x] + s[j - 1][i - 1];
            if (ans >= result) result = ans;
        }
    return result;
}
int minn(int s[10][10], int q[10][10], int n, int k)
{
    int result = 1e5;
    for (int i = 0; i <= n - k; i++)
        for (int j = 0; j <= n - k; j++)
        {
            int x = k + i - 1, y = k + j - 1;
            int ans = s[y][x] - s[y][i - 1] - s[j - 1][x] + s[j - 1][i - 1];
            if (ans <= result) result = ans;
        }
    return result;
}
int main()
{
    cin >> n >> k;
    for (int i = 0; i < n; i++)
        for (int j = 0; j < n; j++)
            cin >> q[i][j];
    for (int i = 0; i < n; i++)
        for (int j = 0; j < n; j++)
            s[i][j] = s[i][j - 1] + s[i - 1][j] - s[i - 1][j - 1] + q[i][j];
    cout << "这是最小的" << minn(s,q,n, k) << endl;
    cout << "这是最大的" << maxx(s, q, n, k) << endl;
    return 0;
}

一维数组做函数形参与二维数组的区别

常见一维数组做函数参考:

void fun(int q[],int n);
void fun1(int *q,int n);
void fun2(int (*q)[5]);//确定数组长度

函数调用
fun2(q,4);//q指向q[4]的第一个地址

常见二维数组做参考

void fun(int q[][5],int n);//二维数组列必须有确定的空间,否则报错。
void fun(int (*arr)[5],int rows);//指针形式,第二维大小明确

2.传递与访问方式的区别

一维传递一个指向数组首元素的指针,失去了数组大小的信息,通常需要额外传递数组大小参数。

二维传递的是指向数组首行的指针,由于二维数组,需要两个维度的大小信息,所以只是需要给出第二个维度的大小。

二维数组做函数引用时

1,当数组大小已知时;

void fun(int (&arr)[3][3]){}

2.当数组大小未知时;

1》采用指向指针的指针

 void fun(int **arr,int rows,int cols){}

2>采用函数模板

template<typename T,size_t rows,size_t cols>

void fun(T(&arr)[rows][cols]){} 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值