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

如何修正C语言中统计西侧可见建筑物数量的未完成代码?

问题分析与代码修正

需求说明:约翰身处大城市,观察一片N×N布局的建筑群。需编写C语言程序,统计从西侧观察时每行中可见的建筑物数量——仅当建筑物未被前方(西侧)更高或同等高度的建筑遮挡时才算可见。
输入格式:第一行输入区域大小N,随后输入N行,每行N个建筑物高度值。
输出格式:每行输出可见建筑物数量,后跟|和该行的高度数据。

原代码存在的问题

  • 全局统计而非逐行统计:max和count变量定义在所有循环外部,遍历所有行后,count存储的是所有行可见建筑的总数,而非每行单独的数量,最终所有行都会显示同一个错误的统计值。
  • 初始值设置不严谨:max初始化为0,若建筑物高度包含0(逻辑上需兼容该场景),会导致第一个高度为0的建筑无法被统计。

修正后的代码

#include <stdio.h>

int main()
{
    int n;
    scanf("%d", &n);
    int building[n][n];
    
    // 读取建筑高度数据
    for(int i = 0; i < n; i++)
    {
        for(int j = 0; j < n; j++)
        {
            scanf("%d", &building[i][j]);
        }
    }
    
    // 逐行统计可见建筑数量并输出
    for(int i = 0; i < n; i++)
    {
        int max_height = -1; // 初始化为比可能的最小高度更小的值
        int visible_count = 0;
        
        for(int j = 0; j < n; j++)
        {
            if(building[i][j] > max_height)
            {
                visible_count++;
                max_height = building[i][j];
            }
        }
        
        // 输出当前行的统计结果和高度数据
        printf("%d |", visible_count);
        for(int j = 0; j < n; j++)
        {
            printf(" %d", building[i][j]);
        }
        puts("");
    }
    
    return 0;
}

修改要点说明

  • 逐行重置统计变量:将max_height和visible_count移至外层循环(每行的循环)内部,确保每行统计前都重置为初始状态,实现独立统计每行的可见建筑数。
  • 优化初始值:将max_height初始化为-1,确保即使建筑高度为0也能被正确统计(0 > -1,会被计入可见数量)。
  • 合并统计与输出逻辑:将统计每行数据和输出该行结果的代码合并到同一个外层循环中,避免额外的循环遍历,提升代码效率。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 07:15:55