#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]){}