解题思路:1.如果是*直接输出,else就考虑相邻元素,这里的相邻元素是核心,可以先考虑同一行和同一列的相邻元素(曼哈顿距离)
abs(i - x) + abs(j - y) < 2 // 上下左右的相邻元素
然后再考虑四角的位置元素。
if (i != x && j != y && abs(i - x) + abs(j - y) == 2)
注意事项:结束的条件,
while(cin >> n >> m, n, m) //当n, m都不为零时,一直循环。
参考代码:
```
#include <iostream> //#include <utility> using namespace std; const int N = 110; const int M = 110; char q[M][N]; int m, n; int getSolve (int x, int y){ int ant = 0; for (int i = 0; i < m; i++) { for (int j = 0; j < n; j++) //曼哈顿距离,可以知道同一行、同一列的相邻元素是否为* if (abs(i - x) + abs(j - y) < 2) { if (q[i][j] == '*') ant++; } //处理四角位置的元素是否为* else if (abs(i - x) + abs(j - y) == 2) if (i != x && j != y && q[i][j] == '*') ant++; } return ant; } int main(){ int d = 1; // 如果m,n都不为0,一直循环下去 while (cin >> m >> n, m, n) { cout << "Field #" << d << ":" << endl; //初始化数组 char ch; for (int i = 0; i < m; i++) { for (int j = 0; j < n; j++) { cin >> ch; q[i][j] = ch; } } for (int i = 0; i < m; i++) { for (int j = 0; j < n; j++) { if(q[i][j] == '*') cout << '*'; else cout << getSolve (i, j); } cout << endl; // 每一行回车 } cout << endl; // 每一段的空行 d ++; } return 0; }
```
0.0分
1 人评分
母牛的故事 (C语言代码)浏览:992 |
C语言程序设计教程(第三版)课后习题1.5 (C语言代码)浏览:644 |
【金明的预算方案】 (C++代码)浏览:873 |
简单的a+b (C语言代码)浏览:626 |
C语言程序设计教程(第三版)课后习题10.3 (C语言代码)浏览:1968 |
星期判断机 (C语言代码)浏览:892 |
C二级辅导-求偶数和 (C语言代码)浏览:707 |
Quadratic Equation (C语言代码)浏览:1034 |
字符删除 (C语言代码)浏览:767 |
简单的a+b (C语言代码)浏览:587 |