【问题描述】
小芳和她的朋友们沿着高度为 h 的动物园栅栏一起行走,他们不想惊扰到动物们,因此他们每个人的高度都不能超过 h ,如果他们中有人身高超过 h ,则他必须弯下腰来行走。
如果将正常行走的人的宽度视为1的话,那么当他弯下腰的时候宽度会变为2。小芳的朋友们想一边走一边聊天,他们希望尽量走成一排,但是道路宽度是有限的,因此可能要分成几排来行走。
给出朋友们的人数 n(包括小芳)、栅栏的高度 h 以及道路的宽度 w ,以及所有 n 个朋友的身高,请输出最少能走成几排?
【输入形式】
输出的第一行为三个整数 n、h、w,接下来的一行 n 个整数,分别表示 n 个人的身高。
【输出形式】
输出为一个整数,表示朋友们可以行走的最小排数。
【样例输入】
2 2 3
1 3
【样例输出】
1
Java代码
import java.util.Scanner;
public class C4 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt(); // 朋友的人数
int h = scanner.nextInt(); // 栅栏的高度
int w = scanner.nextInt(); // 道路的宽度
int totalWidth = 0; // 总宽度需求
int flag = 0; //用于标记朋友的身高是否全为2
for (int i = 0; i < n; i++) {
int height = scanner.nextInt(); // 朋友的身高
if (height <= h){
flag = 1;
}
totalWidth += (height <= h) ? 1 : 2; // 正常行走宽度为1,弯下腰行走宽度为2
}
// 计算最少排数
int minRows = totalWidth / w;
// 如果有余数,则需要再加一排
if (totalWidth % w != 0) {
minRows += 1;
}
if (flag == 0){ //特殊情况:即所有人的height都大于栏栅h,每一排就只能站一个人
minRows = n;
}
System.out.println(minRows);
}
}