吴冰燕 2023-04-23 10:04 采纳率: 84%
浏览 31
已结题

施肥(C++) 难度:初阶

由于题目太长不好截图一张,就截图了两张,请指教,谢谢。
剩下文字凑字数用(12345678910)

img

img

  • 写回答

4条回答 默认 最新

  • 关注

    用一个二维数组记录是否被施肥过,根据施肥点和距离设置标记,最后统计即可。
    运行结果:

    img

    代码

    #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;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(3条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 4月23日
  • 已采纳回答 4月23日
  • 创建了问题 4月23日

悬赏问题

  • ¥15 使用ue5插件narrative时如何切换关卡也保存叙事任务记录
  • ¥20 软件测试决策法疑问求解答
  • ¥15 win11 23H2删除推荐的项目,支持注册表等
  • ¥15 matlab 用yalmip搭建模型,cplex求解,线性化处理的方法
  • ¥15 qt6.6.3 基于百度云的语音识别 不会改
  • ¥15 关于#目标检测#的问题:大概就是类似后台自动检测某下架商品的库存,在他监测到该商品上架并且可以购买的瞬间点击立即购买下单
  • ¥15 神经网络怎么把隐含层变量融合到损失函数中?
  • ¥15 lingo18勾选global solver求解使用的算法
  • ¥15 全部备份安卓app数据包括密码,可以复制到另一手机上运行
  • ¥20 测距传感器数据手册i2c