题目描述:
特定大小的停车场,数组cars[]表示,其中1表示有车,0表示没车。车辆大小不一,小车占一个车位(长度1),货车占两个车位(长度2),卡车占三个车位(长度3)。统计停车场最少可以停多少辆车,返回具体的数目。
输入描述:
整型字符串数组cars[],其中1表示有车,0表示没车,数组长度小于1000。
输出描述:
整型数字字符串,表示最少停车数目。
示例1:
输入
1,0,1
输出
2
说明:1个小车占第1个车位
示例2:
输入
1,1,0,0,1,1,1,0,1
输出
3
说明:1个货车占第1、2个车位
C++源码:
#include <iostream>
#include <vector>
using namespace std;
int main() {
// 由于输入是整型字符串,这里简化处理,直接用字符串模拟输入
string carsStr;
cin >> carsStr;
vector<int> cars;
// 将输入字符串转换为整型数组
for (int i = 0; i < carsStr.size(); ++i) {
if (carsStr[i] != ',') {
cars.push_back(carsStr[i] - '0');
}
}
int count = 0; // 车辆总数
int i = 0;
while (i < cars.size()) {
if (cars[i] == 1) { // 当前位置有车
if (i + 1 < cars.size() && cars[i + 1] == 1 && i + 2 < cars.size() && cars[i + 2] == 1) {
// 连续三个1,表示一辆卡车
count++; // 停车数目加1
i += 3; // 移动到卡车后面的位置
}
else if (i + 1 < cars.size() && cars[i + 1] == 1) {
// 连续两个1,表示一辆货车
count++;
i += 2;
}
else {
// 单独的1,表示一辆小车
count++;
i++;
}
}
else {
i++; // 如果当前位置无车,则直接检查下一个位置
}
}
cout << count << endl;
system("pause");
return 0;
}