【华为OD机试真题 C语言】8、停车场车辆统计 | 机试真题+思路参考+代码解析

文章目录

    • 一、题目
      • 题目描述
      • 输入输出
      • 样例1
      • 样例2
    • 二、思路参考
    • 三、代码参考
      • C语言
  • 作者:KJ.JK


个人博客首页: KJ.JK
 
专栏介绍: 华为OD机试真题汇总,定期更新华为OD各个时间阶段的机试真题,每日定时更新,本专栏将使用C语言进行更新解答,包含真题,思路分析,代码参考,欢迎大家订阅学习


一、题目


题目描述

特定大小的停车场,数组cars[]表示,其中1表示有车,0表示没车。
 
车辆大小不一,小车占一个车位(长度1),货车占两个车位(长度2),卡车占三个车位(长度3)。
 
统计停车场最少可以停多少辆车,返回具体的数目


输入输出

输入
整型字符串数组cars[],其中1表示有车,0表示没车,数组长度小于1000。
 
输出
整型数字字符串,表示最少停车数目


样例1

输入
1,0,1


输出
2

说明:
1个小车占第1个车位,第二个车位空,1个小车占第3个车位,最少有两辆车

样例2

输入
1,1,0,0,1,1,1,0,1


输出
3

说明:
1个货车占第12个车位,第34个车位空,1个卡车占第567个车位
第8个车位空,1个小车占第9个车位,最少3辆车

二、思路参考

读取输入的停车场数组,将其存储在字符数组 cars[] 中。
初始化停车数量 count 为 0。
遍历停车场数组,对每个车位进行以下处理:
如果当前车位为 1,表示有车辆:
如果下一个车位也为 1,则为卡车,将停车数量增加 1,并将当前位置向后移动两个车位。
否则,为货车或小车,将停车数量增加 1,并将当前位置向后移动一个车位。
如果当前车位为 0,表示没有车辆,则继续遍历下一个车位。
输出最少停车数量 count


三、代码参考


C语言

#include 
#include 

int main() {
    char cars[1000];
    int count = 0;

    // 读取输入的停车场数组
    char input[2000];
    fgets(input, sizeof(input), stdin);
    int length = strlen(input);

    // 解析输入的停车场数组
    int index = 0;
    for (int i = 0; i < length; i++) {
        if (input[i] == '0' || input[i] == '1') {
            cars[index] = input[i] - '0';
            index++;
        }
    }

    // 统计最少停车数目
    int size = index;
    int i = 0;
    while (i < size) {
        if (cars[i] == 1) {
            if (i + 2 < size && cars[i + 1] == 1 && cars[i + 2] == 1) {
                count++;
                i += 3;  // 卡车占据3个车位
            } else if (i + 1 < size && cars[i + 1] == 1) {
                count++;
                i += 2;  // 货车占据2个车位
            } else {
                count++;
                i++;  // 小车占据1个车位
            }
        } else {
            i++;
        }
    }

    // 输出结果
    printf("%d\n", count);

    return 0;
}


作者:KJ.JK

你可能感兴趣的:(华为OD机试真题(C语言),c语言,开发语言,算法,华为OD真题,停车场车辆统计)