注意最後一筆測資後不需換行。
程式碼:
[解一]
#include <iostream> using namespace std; int main() { int n,m,times=1; while(cin>>n>>m) { if(n==0&&m==0) break; if(times!=1) cout<<endl; char map[105][105]; for(int i=0;i<100;i++) for(int j=0;j<100;j++) map[i][j]='0'; for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) cin>>map[i][j]; cout<<"Field #"<<times++<<":"<<endl; for(int i=1;i<=n;i++) { for(int j=1;j<=m;j++) { if(map[i][j]=='*') cout<<map[i][j]; else { int count=0; for(int x=i-1;x<=i+1;x++) { for(int y=j-1;y<=j+1;y++) { if(map[x][y]=='*') count++; } } cout<<count; } } cout<<endl; } } return 0; }
[解二]
#include <iostream> using namespace std; int main() { int n, m, counter = 1; int dx[8] = { -1,-1,-1,0,0,1,1,1 }, dy[8] = { -1,0,1,-1,1,-1,0,1 }; while (cin >> n >> m && n && m) { if (counter != 1) cout << endl; char arr[101][101]; for (int i = 0; i < 101; i++) for (int j = 0; j < 101; j++) arr[i][j] = '0'; for (int i = 1; i <= n; i++) for (int j = 1; j <= m; j++) cin >> arr[i][j]; for (int i = 1; i <= n; i++) { for (int j = 1; j <= m; j++) { if (arr[i][j] != '*') { int total = 0; for (int k = 0; k < 8; k++) { if (arr[i + dx[k]][j + dy[k]] == '*') total++; } arr[i][j] = total + '0'; } } } cout << "Field #" << counter++ << ":" << endl; for (int i = 1; i <= n; i++) { for (int j = 1; j <= m; j++) cout << arr[i][j]; cout << endl; } } return 0; }
沒有留言:
張貼留言