(C卷,100分)- 停车场车辆统计(Java & JS & Python & 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辆车

题目解析

这道题的意思应该是:给定了车位占用情况,如 1,1,0,0,1,1,1,0,1,这种车位占用情况,可能停了6辆车,即每个1都停了一个小车,这是最多的情况,但是现在要求最少可能停几辆车。

解题思路也很简单,先把卡车,即111的停车情况先弄出来,再将火车,即11的停车情况弄出来,最后再弄小车1的情况。

Java算法源码

import java.util.Scanner;

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

    String str =
        sc.nextLine()
            .replaceAll(",", "")
            .replaceAll("111", "x")
            .replaceAll("11", "x")
            .replaceAll("1", "x");

    int ans = 0;
    for (int i = 0; i < str.length(); i++) {
      if (str.charAt(i) == 'x') {
        ans++;
      }
    }

    System.out.println(ans);
  }
}

JS算法源码

/* JavaScript Node ACM模式 控制台输入获取 */
const readline = require("readline");

const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout,
});

rl.on("line", (line) => {
  let str = line
    .replaceAll(",", "")
    .replaceAll("111", "x")
    .replaceAll("11", "x")
    .replaceAll("1", "x");

  let count = 0;

  while (true) {
    let index = str.indexOf("x");
    if (index !== -1) {
      count++;
      str = str.slice(index + 1);
    } else {
      break;
    }
  }

  console.log(count);
});

Python算法源码

s = input().replace(",", "").replace("111", "x").replace("11", "x").replace("1", "x")

ans = 0
for c in s:
    if c == 'x':
        ans += 1

print(ans)

C算法源码

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

/*!
 * 字符串替换
 * @param s 主串
 * @param sub 目标子串
 * @param rep 替换子串
 * @return 一个新串,新串等价于主串将自身目标子串部分替换为rep串的结果
 */
char *replaceAll(char *s, char *sub, char *rep) {
    // 新串
    char *res = (char *) calloc(strlen(s), sizeof(char));

    // 目标子串长度
    int len = (int) strlen(sub);

    // 在主串中找到目标子串第一次出现的位置
    char *t = strstr(s, sub);
    while (t != NULL) {
        t[0] = '';
        strcat(res, s);
        strcat(res, rep);
        s = t + len;
        t = strstr(s, sub);
    }

    strcat(res, s);

    return res;
}

int main() {
    char s[1000] = {''};
    int s_len = 0;

    char c;
    while (scanf("%c", &c)) {
        s[s_len++] = c;
        if (getchar() != ',') break;
    }

    // 先把卡车,即111的停车情况先弄出来(替换为x),再将火车,即11的停车情况弄出来(替换为x),最后再弄小车1的情况(替换为x)。

    char *res = replaceAll(replaceAll(replaceAll(s, "111", "x"), "11", "x"), "1", "x");

    int count = 0;

    // 统计x字符的数量,即为最少停车数量
    int i = 0;
    while (res[i] != '') {
        if (res[i] == 'x') {
            count++;
        }
        i++;
    }

    printf("%dn", count);

    return 0;
}

 

免责声明:

1、IT资源小站为非营利性网站,全站所有资料仅供网友个人学习使用,禁止商用
2、本站所有文档、视频、书籍等资料均由网友分享,本站只负责收集不承担任何技术及版权问题
3、如本帖侵犯到任何版权问题,请立即告知本站,本站将及时予与删除下载链接并致以最深的歉意
4、本帖部分内容转载自其它媒体,但并不代表本站赞同其观点和对其真实性负责
5、一经注册为本站会员,一律视为同意网站规定,本站管理员及版主有权禁止违规用户
6、其他单位或个人使用、转载或引用本文时必须同时征得该帖子作者和IT资源小站的同意
7、IT资源小站管理员和版主有权不事先通知发贴者而删除本文

0

评论0

站点公告

没有账号?注册  忘记密码?