优化这段代码int fun(int arr[4][5], int row, int col) { int sum = 0; for (int i = 0; i < row; i++) { for (int j = 0; j < col; j++) { if (i == 0 || i == row - 1 || j == 0 || j == col - 1) { sum += arr[i][j]; } } } return sum;}
时间: 2024-03-12 07:49:42 浏览: 113
对int array进行排序的实例讲解
我们可以对原函数进行如下优化:
1. 将 `row` 和 `col` 定义为常量,避免传参时的错误。
2. 只需要遍历数组的四个角落,即左上、右上、左下、右下,其他边缘元素在这些角落中已经被计算过了。
3. 可以将边缘元素的坐标计算出来,而不是每次进行判断。这样可以减少判断的次数。
优化后的代码如下:
```c
#define ROW 4
#define COL 5
int fun(int arr[ROW][COL]) {
int sum = 0;
int corner[4][2] = {{0, 0}, {0, COL - 1}, {ROW - 1, 0}, {ROW - 1, COL - 1}};
for (int i = 0; i < 4; i++) {
int x = corner[i][0], y = corner[i][1];
sum += arr[x][y];
if (x != ROW - 1) sum += arr[x + 1][y];
if (y != COL - 1) sum += arr[x][y + 1];
if (x != ROW - 1 && y != COL - 1) sum += arr[x + 1][y + 1];
}
return sum;
}
```
这个函数中,我们将 `ROW` 和 `COL` 定义为常量,并定义一个二维数组 `corner`,其中存储了数组的四个角落的坐标。在循环中,我们遍历这四个角落,计算它们和它们相邻的元素的和,并将结果累加到 `sum` 中。最后,函数返回 `sum` 的值,即为二维数组周边元素之和。
阅读全文