返回目录

题目描述

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

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

输入描述

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

输出描述

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

示例:

输入1,0,1
输出2
说明1个小车占第1个车位
第二个车位空
1个小车占第3个车位
最少有两辆车

Python算法源码


def main():
    # 输入
    input_str = input().strip()

    # 将输入的字符串转换为停车场数组
    parking_slots = input_str.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 occupied_length % 3 == 0 and occupied_length != 0:
            # 将当前连续1的长度除以3,得到卡车数量,并累加到最少停车数目
            min_cars += occupied_length // 3
        # 如果当前连续1的长度不能被3整除,说明需要放置小车或货车
        elif occupied_length % 3 != 0:
            # 计算可以放置的卡车数量,并累加到最少停车数目
            min_cars += (occupied_length - occupied_length % 3) // 3
            # 由于还有剩余的车位,需要放置一个小车或货车,所以最少停车数目加1
            min_cars += 1

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


if __name__ == "__main__":
    main()

C算法源码

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

#define MAX_INPUT_SIZE 100

// 函数:替换字符串中所有的子串
char* replaceAll(char* str, const char* key, const char* val) {
    char* pos = strstr(str, key); // 定位第一个子串的位置
    size_t keyLen = strlen(key); // 子串的长度
    size_t valLen = strlen(val); // 替换后的字符串的长度

    // 重复直到所有子串都替换完毕
    while (pos != NULL) {
        // 移动剩余的字符串以容纳新值
        memmove(pos + valLen, pos + keyLen, strlen(pos + keyLen) + 1);
        // 将新值复制到旧子串的位置
        memcpy(pos, val, valLen);
        // 寻找下一个子串的位置
        pos = strstr(pos + valLen, key);
    }

    return str;
}

int main() {
    char input[MAX_INPUT_SIZE];
    fgets(input, sizeof(input), stdin);
    input[strcspn(input, "\n")] = '\0'; // 去除末尾的换行符

    char* s = input;

    // 将所有出现的",", "111", "11", "1"替换为"x"
    s = replaceAll(s, ",", "");
    s = replaceAll(s, "111", "x");
    s = replaceAll(s, "11", "x");
    s = replaceAll(s, "1", "x");

    // 计算"x"的出现次数
    int ans = 0;
    for (int i = 0; s[i] != '\0'; ++i) {
        if (s[i] == 'x') {
            ans++;
        }
    }

    // 输出停车场中的最少停车数
    printf("%d\n", ans);

    return 0;
}

Java算法源码

import java.util.Scanner;
import java.util.ArrayList;

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

        // 读取输入的字符串
        String input = scanner.nextLine();

        // 将输入的字符串转换为停车场数组
        ArrayList<String> parkingSlots = new ArrayList<>();
        StringBuilder temp = new StringBuilder();
        for (int i = 0; i < input.length(); i++) {
            if (input.charAt(i) != ',') {
                temp.append(input.charAt(i));
            } else {
                parkingSlots.add(temp.toString());
                temp = new StringBuilder();
            }
        }
        parkingSlots.add(temp.toString());

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

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

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

        // 输出停车场最少停车数目
        System.out.println(minCars);
    }
}
最后修改:2024 年 04 月 02 日
如果觉得我的文章对你有用,请随意赞赏