您的位置:首页 > 编程语言 > Java开发

java笔试题-六一儿童节

2019-03-12 00:38 78 查看
package com.zjp.offer.study;

import java.util.Arrays;
import java.util.Scanner;

/**
* 六一儿童节,老师带了很多好吃的巧克力到幼儿园。
* 每块巧克力j的重量为w[j],对于每个小朋友i,当他分到的巧克力大小达到h[i] (即w[j]>=h[i]),他才会上去表演节目。
* 老师的目标是将巧克力分发给孩子们,使得最多的小孩上台表演。
* 可以保证每个w[i]> 0且不能将多块巧克力分给一个孩子或将一块分给多个孩子。
*/
public class MaxChild {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
//小朋友数组的长度
int hLen = sc.nextInt();
//小朋友数组
int[] h = new int[hLen];
for (int i = 0; i < hLen; i++) {
h[i] = sc.nextInt();
}
//巧克力数组的长度
int wLen = sc.nextInt();
//巧克力数组
int[] w = new int[wLen];
for (int i = 0; i < wLen; i++) {
w[i] = sc.nextInt();
}
//寻找最大上台表演学生人数
int max = getMaxChild(hLen, h, wLen, w);
System.out.println(max);
}

/**
* 思路:将小朋友应该得到的巧克力重量排序,对巧克力重量排序
* 将巧克力重量最小的派给满足要求的最小学生应得的重量,这样分发可以选出最多的小朋友上台
*
* @param hLen
* @param h
* @param wLen
* @param w
* @return
*/
private static int getMaxChild(int hLen, int[] h, int wLen, int[] w) {
//指向小朋友
int i = 0;
//指向巧克力
int j = 0;
//保存最大结果
int max = 0;
Arrays.sort(h);
Arrays.sort(w);
while (i < hLen && j < wLen) {
if (h[i] <= w[j]) {//该小朋友可以上台
max++;
i++;
}
j++;
}
return max;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: