You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用C语言实现10x10地图炸弹爆炸半径计算与安全点统计

实现思路
  • 先收集地图中所有炸弹的坐标,避免遍历全图重复判断
  • 对每颗炸弹,计算其8方向所有有效范围内格子的伤害值(采用切比雪夫距离计算半径,每向外1格伤害衰减1,伤害大于0则累加到对应格子)
  • 最后遍历全图统计数值为0的安全点总数,按要求输出结果
修改后的完整代码
#include <stdio.h>
#include <stdlib.h> // 用于调用abs函数计算绝对值

int main()
{
  int map[10][10], p, i, j, safe;
  char charmap[10][10];
  int bombs[100][2], bomb_cnt = 0; // 存储所有炸弹的坐标,最多支持100个炸弹

  scanf("%d", &p);

  // 初始化伤害地图全为0
  for (i = 0; i < 10; i++)
    for (j = 0; j < 10; j++)
      map[i][j] = 0;

  // 读取字符地图,同步收集所有炸弹坐标
  for (i = 0; i < 10; i++)
    for (j = 0; j < 10; j++)
    {
      scanf(" %c", &charmap[i][j]);
      if (charmap[i][j] == 'X')
      {
        bombs[bomb_cnt][0] = i;
        bombs[bomb_cnt][1] = j;
        bomb_cnt++;
      }
    }

  // 遍历所有炸弹计算爆炸伤害
  for (int b = 0; b < bomb_cnt; b++)
  {
    int x = bombs[b][0];
    int y = bombs[b][1];
    // 遍历炸弹威力覆盖的所有坐标偏移量
    for (int dx = -(p-1); dx <= p-1; dx++)
    {
      for (int dy = -(p-1); dy <= p-1; dy++)
      {
        int nx = x + dx;
        int ny = y + dy;
        // 跳过超出地图边界的坐标
        if (nx < 0 || nx >= 10 || ny < 0 || ny >= 10)
          continue;
        // 计算切比雪夫距离(8方向扩散的距离判定规则)
        int dist = abs(dx) > abs(dy) ? abs(dx) : abs(dy);
        int damage = p - dist;
        if (damage > 0)
          map[nx][ny] += damage;
      }
    }
  }

  // 统计安全点总数
  safe = 0;
  for (i = 0; i < 10; i++)
    for (j = 0; j < 10; j++)
      if (map[i][j] == 0)
        safe++;

  // 输出伤害地图
  for (i = 0; i < 10; i++)
  {
    for (j = 0; j < 10; j++)
    {
      printf("%d ", map[i][j]);
    }
    printf("\n");
  }
  // 输出安全点数量
  printf("\n%d\n", safe);
  return 0;
}
核心修改说明
  1. 新增炸弹坐标存储数组,读取地图时同步记录所有炸弹位置,避免后续重复遍历识别
  2. 新增爆炸伤害计算逻辑:对每个炸弹遍历所有可能的覆盖范围,自动处理边界判定、伤害衰减、多炸弹伤害叠加的场景
  3. 新增安全点统计逻辑,遍历全图计数数值为0的格子
  4. 调整输出逻辑,完全匹配题目要求的地图+空行+安全点数量的输出格式

内容的提问来源于stack exchange,提问作者sggus

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 04:15:03