个人博客首页: KJ.JK
专栏介绍: 华为OD机试真题汇总,定期更新华为OD各个时间阶段的机试真题,每日定时更新,本专栏将使用C语言进行更新解答,包含真题,思路分析,代码参考,欢迎大家订阅学习
特定大小的停车场,数组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辆车
读取输入的停车场数组,将其存储在字符数组 cars[] 中。
初始化停车数量 count 为 0。
遍历停车场数组,对每个车位进行以下处理:
如果当前车位为 1,表示有车辆:
如果下一个车位也为 1,则为卡车,将停车数量增加 1,并将当前位置向后移动两个车位。
否则,为货车或小车,将停车数量增加 1,并将当前位置向后移动一个车位。
如果当前车位为 0,表示没有车辆,则继续遍历下一个车位。
输出最少停车数量 count
#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;
}