返回目录
题目描述
特定大小的停车场,数组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);
}
}
4 条评论
[...]2024 C卷 100分序号题目知 识 点难易程度1密码输入检测数据结构/栈☆☆☆2分配土地几何问题☆☆☆3找座位逻辑分析☆☆☆4智能成绩表动态条件分析☆☆☆5内存冷热标记多条件排序☆☆☆6螺旋数字矩阵逻辑分析☆☆☆7围棋的气逻辑分析☆☆☆8分割平衡字符串逻辑分析☆☆☆9机器人搬砖二分法☆☆☆10转盘寿司数据结构/栈/单调栈☆☆☆11小明找位置二分法☆☆☆12提取字符串的最长合法简单数学表达式双指[...]
[...]2024 C卷 100分序号题目知 识 点难易程度1密码输入检测数据结构/栈☆☆☆2分配土地几何问题☆☆☆3找座位逻辑分析☆☆☆4智能成绩表动态条件分析☆☆☆5内存冷热标记多条件排序☆☆☆6螺旋数字矩阵逻辑分析☆☆☆7围棋的气逻辑分析☆☆☆8分割平衡字符串逻辑分析☆☆☆9机器人搬砖二分法☆☆☆10转盘寿司数据结构/栈/单调栈☆☆☆11小明找位置二分法☆☆☆12提取字符串的最长合法简单数学表达式双指[...]
[...]2024 C卷 100分序号题目知 识 点难易程度1密码输入检测数据结构/栈☆☆☆2分配土地几何问题☆☆☆3找座位逻辑分析☆☆☆4智能成绩表动态条件分析☆☆☆5内存冷热标记多条件排序☆☆☆6螺旋数字矩阵逻辑分析☆☆☆7围棋的气逻辑分析☆☆☆8分割平衡字符串逻辑分析☆☆☆9机器人搬砖二分法☆☆☆10转盘寿司数据结构/栈/单调栈☆☆☆11小明找位置二分法☆☆☆12提取字符串的最长合法简单数学表达式双指[...]
[...]2024 C卷 100分序号题目知 识 点难易程度1密码输入检测数据结构/栈☆☆☆2分配土地几何问题☆☆☆3找座位逻辑分析☆☆☆4智能成绩表动态条件分析☆☆☆5内存冷热标记多条件排序☆☆☆6螺旋数字矩阵逻辑分析☆☆☆7围棋的气逻辑分析☆☆☆8分割平衡字符串逻辑分析☆☆☆9机器人搬砖二分法☆☆☆10转盘寿司数据结构/栈/单调栈☆☆☆11小明找位置二分法☆☆☆12提取字符串的最长合法简单数学表达式双指[...]