Description
Input
Output
以下是我的超时代码:
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <string>
#include <cmath>
#include <algorithm>
#include <queue>
#include <map>
#include <set>
#include <list>
#include <vector>
typedef long long ll;
using namespace std;
char a[111][111];
int h[111][111];
int cout1(const char a[][111], int i, int j) {
int sum=0;
if (a[i + 1][j] == '*')
sum++;
if (a[i + 1][j + 1] == '*')
sum++;
if (a[i][j + 1] == '*')
sum++;
return sum;
}
int cout2(const char a[][111], int i, int j) {
int sum = 0;
if (a[i][j - 1] == '*')
sum++;
if(a[i+1][j]=='*')
sum++;
if(a[i+1][j-1]=='*')
sum++;
return sum;
}
int cout3(const char a[][111], int i, int j) {
int sum = 0;
if(a[i][j-1]=='*')
sum++;
if(a[i][j+1]=='*')
sum++;
if(a[i+1][j-1]=='*')
sum++;
if(a[i+1][j]=='*')
sum++;
if(a[i+1][j+1]=='*')
sum++;
return sum;
}
int cout4(const char a[][111], int i, int j) {
int sum = 0;
if (a[i + 1][j + 1] == '*')
sum++;
if (a[i + 1][j] == '*')
sum++;
if (a[i][j + 1] == '*')
sum++;
if (a[i - 1][j] == '*')
sum++;
if (a[i - 1][j + 1] == '*')
sum++;
return sum;
}
int cout5(const char a[][111], int i, int j) {
int sum = 0;
if (a[i + 1][j - 1] == '*')
sum++;
if (a[i + 1][j] == '*')
sum++;
if (a[i - 1][j - 1] == '*')
sum++;
if (a[i - 1][j] == '*')
sum++;
if (a[i][j - 1] == '*')
sum++;
return sum;
}
int cout6(const char a[][111], int i, int j) {
int sum = 0;
if (a[i - 1][j] == '*')
sum++;
if (a[i - 1][j + 1] == '*')
sum++;
if (a[i][j + 1] == '*')
sum++;
return sum;
}
int cout7(const char a[][111], int i, int j) {
int sum = 0;
if (a[i - 1][j - 1] == '*')
sum++;
if (a[i - 1][j] == '*')
sum++;
if (a[i - 1][j + 1] == '*')
sum++;
if (a[i][j - 1] == '*')
sum++;
if (a[i][j + 1] == '*')
sum++;
return sum;
}
int cout8(const char a[][111], int i, int j) {
int sum = 0;
if (a[i][j - 1] == '*')
sum++;
if (a[i - 1][j - 1] == '*')
sum++;
if (a[i - 1][j] == '*')
sum++;
return sum;
}
int cout9(const char a[][111], int i, int j) {
int sum = 0;
if (a[i][j - 1] == '*')
sum++;
if (a[i][j + 1] == '*')
sum++;
if (a[i + 1][j - 1] == '*')
sum++;
if (a[i + 1][j] == '*')
sum++;
if (a[i + 1][j + 1] == '*')
sum++;
if (a[i - 1][j - 1] == '*')
sum++;
if (a[i - 1][j] == '*')
sum++;
if (a[i - 1][j + 1] == '*')
sum++;
return sum;
}
int main()
{
int n, m;
cin >> n >> m;
for (int i = 0; i < n; i++) {
cin >> a[i];
}
memset(h, 0, sizeof(h));
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
if (i == 0) {
if (j == 0) {
h[i][j] = cout1(a, i, j);
}
else if (j == m - 1) {
h[i][j] = cout2(a, i, j);
}
else {
h[i][j] = cout3(a, i, j);
}
}
else if (i == n - 1) {
if (j == 0) {
h[i][j] = cout6(a, i, j);
}
else if (j == m - 1) {
h[i][j] = cout8(a, i, j);
}
else {
h[i][j] = cout7(a, i, j);
}
}
else {
if (j == 0) {
h[i][j] = cout4(a, i, j);
}
else if (j == m - 1) {
h[i][j] = cout5(a, i, j);
}
else {
h[i][j] = cout9(a, i, j);
}
}
}
}
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
if (a[i][j] == '*')
cout << "*";
else
cout << h[i][j];
}
cout << endl;
}
return 0;
}
数组从1开始赋值
可以将很多种情况化为一种
#include <iostream>
#include <cstdio>
#include <cstring>
#include <vector>
#include <map>
#include <set>
#include <algorithm>
#include <math.h>
using namespace std;
const int maxn=1010;
char a[maxn][maxn],b[maxn][maxn];
int main()
{
int n,m,i,j;
scanf("%d%d",&n,&m);
for(i=1; i<=n; i++)
for(j=1; j<=m; j++)
cin>>a[i][j];
for(i=1; i<=n; i++)
for(j=1; j<=m; j++)
{
if(a[i][j]!='*')//八个方向遍历
{
int ans=0;
if(a[i][j+1]=='*')
ans++;
if(a[i][j-1]=='*')
ans++;
if(a[i+1][j]=='*')
ans++;
if(a[i-1][j]=='*')
ans++;
if(a[i+1][j-1]=='*')
ans++;
if(a[i+1][j+1]=='*')
ans++;
if(a[i-1][j+1]=='*')
ans++;
if(a[i-1][j-1]=='*')
ans++;
b[i][j]=ans+'0';//int型转char
}
else if(a[i][j]=='*')
b[i][j]='*';
}
for(i=1; i<=n; i++)
{
for(j=1; j<=m; j++)
cout<<b[i][j];
printf("\n");
}
return 0;
}