当前位置:   article > 正文

华为OD机试真题B卷 Java 实现【停车场车辆统计】,附详细解题思路_特定大小的停车场,数组cars表示 其中1表示有车

特定大小的停车场,数组cars表示 其中1表示有车

一、题目描述

特定大小的停车场,数组cars[]表示,其中1表示有车,0表示没车。

车辆大小不一,小车占一个车位(长度1),货车占两个车位(长度2),卡车占三个车位(长度3)。

统计停车场最少可以停多少辆车,返回具体的数目。

二、输入描述

整型字符串数组cars[],其中1表示有车,0表示没车,数组长度小于1000。

输入0,0,1,0,1,1,1,0,0,1,1,0。

输入说明:

小车占一个车位(长度1),货车占两个车位(长度2),卡车占三个车位(长度3)。

1表示1个小车,两个连续的1表示货车,三个连续的1表示卡车。

三、输出描述

整型数字字符串,表示最少停车数目。

四、解题思路

  1. 读取输入的停车场信息,存储在字符串数组 cars[] 中;
  2. 初始化变量 total 和 tem 为0,用于记录停车总数和连续有车的长度;
  3. 遍历停车场数组 cars[],根据当前位置的值进行如下操作:
    • 如果当前位置为1,表示有车,将 tem 值加1;
    • 如果当前位置为0,表示没车,且 tem 不为0,表示之前有连续的车辆,根据 tem 的值计算可停放的最少车辆数,并累加到 total 中,然后将 tem 重置为0。
  4. 如果遍历结束后 tem 不为0,表示最后一辆车辆后面没有0了,需要将 tem 的值计算可停放的最少车辆数,并累加到 total 中;
  5. 输出最少停车数目 total。

五、Java算法源码

public static void main(String[] args) {
	Scanner sc = new Scanner(System.in);
	    String[] split = sc.nextLine().split(",");
	    int total = 0;
	    int tem = 0;
	    for (String s : split) {
	        if (Integer.parseInt(s) == 1) {
	            tem++;
	        } else {
	            if (tem != 0) {
	                total += calcMin(tem);
	            }
	            tem = 0;
	        }
	    }
	    total += calcMin(tem);
	    System.out.println(total);
	}
	
	private static int calcMin(int num) {
	    int total = 0;
	    while (num >= 3) {
	        num -= 3;
	        total++;
	    }
	    while (num >= 2) {
	        num -= 2;
	        total++;
	    }
	    total += num;
	    return total;
	}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32

六、效果展示

在这里插入图片描述

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop】

推荐阅读
相关标签