由于题目太长不好截图一张,就截图了两张,请指教,谢谢。
剩下文字凑字数用(12345678910)
用一个二维数组记录是否被施肥过,根据施肥点和距离设置标记,最后统计即可。
运行结果:
代码
#include <iostream>
using namespace std;
int main()
{
char flag[10001][10001] = { 0 }; //记录是否被施肥
int n, m;
int posx, posy; //施肥点
cin >> n >> m;
for (int i = 0; i < m; i++)
{
cin >> posx >> posy; //输入施肥点
//根据距离处理flag
int x = posx - 1;
int y = posy - 1; //得到下标
flag[x][y] = 1;
//直线距离上的点,左侧
if (x - 2 >= 0)
{
flag[x - 2][y] = 1;
flag[x - 1][y] = 1;
}
else if (x - 1 >= 0)
flag[x - 1][y] = 1;
//直线距离上的点,右侧
if (x + 2 < n)
{
flag[x + 1][y] = 1;
flag[x + 2][y] = 1;
}
else if (x + 1 < n)
flag[x + 1][y] = 1;
//直线距离上的点,上方
if (y - 2 >= 0)
{
flag[x][y - 2] = 1;
flag[x][y - 1] = 1;
}
else if (y - 1 >= 0)
flag[x][y - 1] = 1;
//直线距离上的点,下方
if (y + 2 < n)
{
flag[x][y + 2] = 1;
flag[x][y + 1] = 1;
}
else if (y + 1 < n)
flag[x][y + 1] = 1;
//判断斜线距离
int xs = x - 1 >= 0 ? (x - 1) : 0;
int xe = x + 1 < n ? (x + 1) : (n-1);
int ys = y - 1 >= 0 ? (y - 1) : 0;
int ye = y + 1 < n ? (y + 1) : (n - 1);
for (int k=xs; k <= xe; k++)
{
for (int q = ys; q <= ye; q++)
flag[k][q] = 1;
}
}
int nmb = 0;
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
{
if (flag[i][j] != 0)
nmb++;
}
}
cout << nmb;
return 0;
}
题目都不发出来的吗,只提供测试用例没用啊
由于题目描述图片无法查看,无法给出具体的提示或解决方案。建议提供文字版或可查看的图片版题目描述以便回答。