题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4500
找规律的题目,找到就很简单了:如果该位置是负整数,则四周的数中,正整数和负整数都要相加;如果该位置是正整数,则四周的数中,如果是负整数,则加上它的绝对值,是正整数则直接相减,归结到底就是无论是正负整数,都要相减。要注意的一点是:要判断越界情况!
1 #include <iostream> 2 using namespace std; 3 4 int main() 5 { 6 int i, j, max, bi, bj, n, m, pos[22][22], cur[22][22]; 7 while (cin >> n >> m && (m || n)) 8 { 9 memset(cur, 0, sizeof(cur)); 10 memset(pos, 0, sizeof(pos)); 11 for (i = 0; i < n; i++) 12 { 13 for (j = 0; j < m; j++) 14 cin >> pos[i][j]; 15 } 16 for (i = 0; i < n; i++) 17 { 18 for (j = 0; j < m; j++) 19 { 20 if (pos[i][j] < 0) // 该位置是负整数 21 { 22 if (j+1 < m) // 判断是否越界 23 cur[i][j] += pos[i][j+1]; 24 if (j-1 >= 0) 25 cur[i][j] += pos[i][j-1]; 26 if (i-1 >= 0) 27 cur[i][j] += pos[i-1][j]; 28 if (i+1 < n) 29 cur[i][j] += pos[i+1][j]; 30 } 31 if (pos[i][j] > 0) // 该位置是正整数 32 { 33 if (j+1 < m) 34 cur[i][j] -= pos[i][j+1]; 35 if (j-1 >= 0) 36 cur[i][j] -= pos[i][j-1]; 37 if (i-1 >= 0) 38 cur[i][j] -= pos[i-1][j]; 39 if (i+1 < n) 40 cur[i][j] -= pos[i+1][j]; 41 } 42 } 43 } 44 max = cur[0][0]; 45 for (i = 0; i < n; i++) 46 { 47 for (j = 0; j < m; j++) 48 { 49 if (max < cur[i][j]) 50 { 51 max = cur[i][j]; 52 bi = i+1; //记录行号 53 bj = j+1; //记录列号 54 } 55 } 56 } 57 printf("%d %d %d\n", bi, bj, max); 58 } 59 return 0; 60 }