#include<stdio.h> #include<math.h> #define MAXSIZE 1001 int num[MAXSIZE][MAXSIZE]; char c[MAXSIZE][MAXSIZE]; int res(int a, int b); int main(){ int lenth = 0, width = 0, ans = 0; scanf("%d %d", &width, &lenth); getchar(); //初始化 for(int i = 0; i <= width + 1; i++){ num[i][0] = 0; num[i][lenth+1] = 0; } for(int j = 0; j <= lenth + 1; j++){ num[0][j] = 0; num[width+1][j] = 0; } //输入 for(int i = 1; i <= width; i++){ for(int j = 1; j <= lenth; j++){ scanf("%c", &c[i][j]); } getchar(); } for(int i = 1; i <= width; i++){ for(int j = 1; j <= lenth; j++){ num[i][j] = c[i][j] - '0'; } } //上下 int res0 = 0; for(int i = 1; i <= width; i++){ for(int j = 1; j <=lenth; j++){ if(num[i][j]) res0++; } } ans = 2 * res0; //遍历 for(int i = 1; i <= width; i++){ for(int j = 1; j <= lenth; j++){ ans += res(num[i][j], num[i][j-1]); ans += res(num[i][j], num[i][j+1]); ans += res(num[i][j], num[i-1][j]); ans += res(num[i][j], num[i+1][j]); } } printf("%d\n", ans); return 0; } int res(int a, int b){ if(a - b > 0) return a-b; else return 0; }检查有无明显错误
时间: 2024-04-17 16:25:51 浏览: 92
#include <stdio.h>
4星 · 用户满意度95%
根据您提供的代码,我没有发现明显的错误。这段代码看起来主要是计算给定的矩阵中某个位置与其上下左右相邻位置的差值之和。
然而,我注意到您在计算差值之和时,没有考虑两个位置之间的距离。如果您想要计算两个位置之间的距离,并根据距离来计算差值的贡献,您可以使用`abs()`函数来获取绝对值。
下面是修改后的代码,用于计算差值之和:
```c
int res(int a, int b, int distance) {
int diff = abs(a - b);
return diff * distance;
}
```
然后,在遍历矩阵时,您可以计算每个位置与相邻位置之间的距离,并将差值乘以距离累加到`ans`上。例如:
```c
ans += res(num[i][j], num[i][j-1], 1); // 左
ans += res(num[i][j], num[i][j+1], 1); // 右
ans += res(num[i][j], num[i-1][j], 1); // 上
ans += res(num[i][j], num[i+1][j], 1); // 下
```
如果您还有其他问题,请随时提问。我会尽力帮助您解决问题。
阅读全文