题目描述
特定大小的停车场,数组cars[]表示,其中1表示有车,0表示没车。车辆大小不一,小车占一个车位(长度1),货车占两个车位(长度2),卡车占三个车位(长度3)。
统计停车场最少可以停多少辆车,返回具体的数目。
输入描述
整型字符串数组cars[],其中1表示有车,0表示没车,数组长度小于1000。
输出描述
整型数字字符串,表示最少停车数目。
用例
输入 | 1,0,1 |
---|---|
输出 | 2 |
说明 | 1个小车占第1个车位 |
输入 | 1,1,0,0,1,1,1,0,1 |
---|---|
输出 | 3 |
说明 | 1个货车占第1、2个车位 |
给下面的代码添加注释(不要改动原本的代码):
代码
#include <stdio.h>
#include <stdlib.h>
#include <string.h>// 定义停车场车位最大数量常量
#define MAX_LEN 1000int main() {// 初始化输入字符串数组,用于存储用户输入的以逗号分隔的字符序列char input[MAX_LEN];// 读取标准输入(即从控制台读取一行数据),并去掉末尾换行符fgets(input, MAX_LEN, stdin);input[strcspn(input, "\n")] = '\0';// 初始化整型数组cars,用于存储转换为整数形式的车辆状态int cars[MAX_LEN];int count = 0; // 记录有效输入的数量// 使用strtok函数按逗号分割输入字符串,并将每个数字串转换为整数存入cars数组char *token = strtok(input, ",");while (token != NULL) {cars[count++] = atoi(token); // 将当前token转换为整数并存入cars数组token = strtok(NULL, ","); // 继续处理下一个token}// 初始化临时变量tmplen用于计算连续停车长度,res用于记录最少可以停多少辆车int tmplen = 0;int res = 0;// 遍历整个cars数组for (int i = 0; i < count; i++) {// 当前车位有车(用1表示)if (cars[i] == 1) {tmplen++; // 增加连续停车长度计数// 判断是否到达最后一个车位或者下一个车位是空的(用0表示)if (i == count - 1 || cars[i + 1] == 0) {// 根据停车长度计算能够停放的车辆数(卡车占3个车位,小车或货车各占1或2个车位)res += tmplen / 3; // 先添加能完全停放的卡车数量if (tmplen % 3 != 0) { // 若剩余车位不足3个,则增加一辆车res++;}tmplen = 0; // 重置临时停车长度计数器}}}// 输出最少可以停多少辆车的结果printf("%d\n", res);return 0;
}