注意最後一筆測資後不需換行。
程式碼:
[解一]
#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;
}
沒有留言:
張貼留言