#C48. 华为OD机试统一考试D卷C卷 - 最少停车数/停车场车辆统计

华为OD机试统一考试D卷C卷 - 最少停车数/停车场车辆统计

题目链接

华为OD机试统一考试D卷C卷 - 最少停车数/停车场车辆统计(C++ Java JavaScript Python)

https://blog.csdn.net/banxia_frontend/article/details/134795768

题目描述

特定大小的停车场,数组cars[]表示,其中1表示有车,0表示没车。车辆大小不一,小车占一个车位(长度1),货车占两个车位(长度2),卡车占三个车位(长度3)。

统计停车场最少可以停多少辆车,返回具体的数目。

输入描述

整型字符串数组cars[],其中1表示有车,0表示没车,数组长度小于1000。

输出描述

整型数字字符串,表示最少停车数目。

用例

输入1,0,1
输出2
说明

1个小车占第1个车位

第二个车位空

1个小车占第3个车位

最少有两辆车

输入1,1,0,0,1,1,1,0,1
输出3
说明

1个货车占第1、2个车位

第3、4个车位空

1个卡车占第5、6、7个车位

第8个车位空

1个小车占第9个车位

最少3辆车

C++

#include <iostream>
#include <sstream>
#include <vector>
#include <string>

int main() {
    std::string input;
    std::getline(std::cin, input);

    // 将输入的字符串转换为停车场数组
    std::istringstream iss(input);
    std::string token;
    std::string inputString;
    while (std::getline(iss, token, ',')) {
        inputString += token;
    }
    std::vector<std::string> parking_slots;
    std::istringstream split(inputString);
    while (std::getline(split, token, '0')) {
        parking_slots.push_back(token);
    }

    // 初始化停车场最少停车数目为0
    int min_cars = 0;

    // 遍历停车场数组,统计每个连续的1的长度
    for (const auto& slot : parking_slots) {
        // 计算当前连续1的长度
        int occupied_length = slot.length();

        // 如果当前连续1的长度为0,不做任何操作
        if (occupied_length == 0) {
            min_cars = min_cars;
        }
        // 如果当前连续1的长度能被3整除,说明可以完全放置卡车
        else if (occupied_length % 3 == 0 && occupied_length != 0) {
            // 将当前连续1的长度除以3,得到卡车数量,并累加到最少停车数目
            min_cars += occupied_length / 3;
        }
        // 如果当前连续1的长度不能被3整除,说明需要放置小车或货车
        else if (occupied_length % 3 != 0) {
            // 计算可以放置的卡车数量,并累加到最少停车数目
            min_cars += (occupied_length - occupied_length % 3) / 3;
            // 由于还有剩余的车位,需要放置一个小车或货车,所以最少停车数目加1
            min_cars += 1;
        }
    }

    // 输出停车场最少停车数目
    std::cout << min_cars << std::endl;
    return 0;
}

java

import java.util.Scanner;
import java.util.Arrays;

public class Main{
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        // 将输入的字符串转换为停车场数组
        String[] inputArray = scanner.nextLine().split(",");
        String inputString = String.join("", inputArray);
        String[] parking_slots = inputString.split("0");

        // 初始化停车场最少停车数目为0
        int min_cars = 0;

        // 遍历停车场数组,统计每个连续的1的长度
        for (String slot : parking_slots) {
            // 计算当前连续1的长度
            int occupied_length = slot.length();

            // 如果当前连续1的长度为0,不做任何操作
            if (occupied_length == 0) {
                min_cars = min_cars;
            }
            // 如果当前连续1的长度能被3整除,说明可以完全放置卡车
            else if (occupied_length % 3 == 0 && occupied_length != 0) {
                // 将当前连续1的长度除以3,得到卡车数量,并累加到最少停车数目
                min_cars += occupied_length / 3;
            }
            // 如果当前连续1的长度不能被3整除,说明需要放置小车或货车
            else if (occupied_length % 3 != 0) {
                // 计算可以放置的卡车数量,并累加到最少停车数目
                min_cars += (occupied_length - occupied_length % 3) / 3;
                // 由于还有剩余的车位,需要放置一个小车或货车,所以最少停车数目加1
                min_cars += 1;
            }
        }

        // 输出停车场最少停车数目
        System.out.println(min_cars);
    }
}

javaScript

const readline = require('readline').createInterface({
  input: process.stdin,
  output: process.stdout
});

readline.on('line', (input) => {
  // 将输入的字符串转换为停车场数组
  const inputArray = input.split(',');
  const inputString = inputArray.join('');
  const parking_slots = inputString.split('0');

  // 初始化停车场最少停车数目为0
  let min_cars = 0;

  // 遍历停车场数组,统计每个连续的1的长度
  for (const slot of parking_slots) {
    // 计算当前连续1的长度
    const occupied_length = slot.length;

    // 如果当前连续1的长度为0,不做任何操作
    if (occupied_length === 0) {
      min_cars = min_cars;
    }
    // 如果当前连续1的长度能被3整除,说明可以完全放置卡车
    else if (occupied_length % 3 === 0 && occupied_length !== 0) {
      // 将当前连续1的长度除以3,得到卡车数量,并累加到最少停车数目
      min_cars += Math.floor(occupied_length / 3);
    }
    // 如果当前连续1的长度不能被3整除,说明需要放置小车或货车
    else if (occupied_length % 3 !== 0) {
      // 计算可以放置的卡车数量,并累加到最少停车数目
      min_cars += Math.floor((occupied_length - occupied_length % 3) / 3);
      // 由于还有剩余的车位,需要放置一个小车或货车,所以最少停车数目加1
      min_cars += 1;
    }
  }

  // 输出停车场最少停车数目
  console.log(min_cars);
  readline.close();
});

python

import sys

 
parking_slots = ("".join(i for i in (input().split(",")))).split("0")

# 初始化停车场最少停车数目为0
min_cars = 0

# 遍历停车场数组,统计每个连续的1的长度
for slot in parking_slots:
    # 计算当前连续1的长度
    occupied_length = len(slot)
    
    # 如果当前连续1的长度为0,不做任何操作
    if occupied_length == 0:
        min_cars = min_cars
    # 如果当前连续1的长度能被3整除,说明可以完全放置卡车
    elif not occupied_length % 3 and occupied_length != 0:
        # 将当前连续1的长度除以3,得到卡车数量,并累加到最少停车数目
        min_cars += occupied_length // 3
    # 如果当前连续1的长度不能被3整除,说明需要放置小车或货车
    elif occupied_length % 3:
        # 计算可以放置的卡车数量,并累加到最少停车数目
        min_cars += (occupied_length - occupied_length % 3) // 3
        # 由于还有剩余的车位,需要放置一个小车或货车,所以最少停车数目加1
        min_cars += 1

# 输出停车场最少停车数目
print(int(min_cars))

C语言

#include <stdio.h>
#include <string.h>

#define MAX_INPUT_LEN 1000

int main() {
    char input[MAX_INPUT_LEN];
    fgets(input, MAX_INPUT_LEN, stdin); // 从标准输入读取字符串

    // 去除输入字符串末尾的换行符
    input[strcspn(input, "\n")] = 0;

    // 初始化停车场最少停车数目为0
    int min_cars = 0;
    char *token = strtok(input, ","); // 使用0作为分隔符分割字符串

    // 遍历分割后的字符串数组,统计每个连续的1的长度
    while (token != NULL) {
        int occupied_length = strlen(token); // 计算当前连续1的长度

        // 如果当前连续1的长度为0,不做任何操作
        if (occupied_length == 0) {
            // 不需要做任何操作
        }
        // 如果当前连续1的长度能被3整除,说明可以完全放置卡车
        else if (occupied_length % 3 == 0) {
            min_cars += occupied_length / 3; // 将当前连续1的长度除以3,得到卡车数量,并累加到最少停车数目
        }
        // 如果当前连续1的长度不能被3整除,说明需要放置小车或货车
        else {
            min_cars += occupied_length / 3; // 计算可以放置的卡车数量,并累加到最少停车数目
            min_cars += 1; // 由于还有剩余的车位,需要放置一个小车或货车,所以最少停车数目加1
        }

        token = strtok(NULL, "0"); // 继续分割字符串
    }

    // 输出停车场最少停车数目
    printf("%d\n", min_cars);
    return 0;
}

完整用例

用例1

1,0,1

用例2

1,1,0,0,1,1,1,0,1

用例3

0,0,0,0,0

用例4

1,1,1,1,1

用例5

1,1,1,0,0,0,1,1,1

用例6

1,1,1,0,1,1,1,0,1,1,1

用例7

1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0

用例8

1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,

用例9

1,0,0,1,1,0,1,0,0,1,1,1

用例10

1,0,0,1,1,0,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1

@[TOC]

fengmian