• 拼多多 2018 校招编程题 六一儿童节


    题目描述

    六一儿童节,老师带了很多好吃的巧克力到幼儿园。每块巧克力j的重量为w[j],对于每个小朋友i,当他分到的巧克力大小达到h[i] (即w[j]>=h[i]),他才会上去表演节目。老师的目标是将巧克力分发给孩子们,使得最多的小孩上台表演。可以保证每个w[i]> 0且不能将多块巧克力分给一个孩子或将一块分给多个孩子。

    输入描述:

    第一行:n,表示h数组元素个数
    第二行:n个h数组元素
    第三行:m,表示w数组元素个数
    第四行:m个w数组元素

    输出描述:

    上台表演学生人数
    示例1

    输入

    复制
    3 
    2 2 3
    2
    3 1

    输出

    复制
    1




    思路分析

    1.将数组h和数组w从小到大排序

    2.将两个数组从头开始比对,

      ①如果h[i]==w[j] 则将第大小为w[j]的巧克力正好分给要求为h[i]的小朋友,sum++,i++,j++;
      ②如果h[i]<w[j] 则将第大小为w[j]的巧克力分能够分给要求为h[i]的小朋友,sum++,i++,j++;
      ③如果h[i]>w[j] w[j]的大小不够,所以将j的指针往后挪,j++;

    3.当两个数组都到头了,循环结束,输出sum即可;

    Java 代码如下:
    import java.util.Scanner;
    public class Main{
        public static void main(String[] args){
            Scanner sc = new Scanner(System.in);
            int n = sc.nextInt();
            int[] h = new int[n];
            for(int i = 0;i<h.length;i++){
                h[i] = sc.nextInt();
            }
            int m = sc.nextInt();
            int[] w = new int[m];
            for(int i = 0;i<w.length;i++){
                w[i] = sc.nextInt();
            }
            int temp;
    //运用快排进行排序
    for(int i = 1;i<h.length;i++){ for(int j = i;i>0;i--){ if(h[i]<h[i-1]){ temp = h[i]; h[i] = h[i-1]; h[i-1] = temp; }else break; } } for(int i = 1;i<w.length;i++){ for(int j = i;i>0;i--){ if(w[i]<w[i-1]){ temp = w[i]; w[i] = w[i-1]; w[i-1] = temp; }else break; } } int i=0,j=0,sum=0; while(i<h.length && j<w.length){ if(h[i]>w[j]){ j++; }else{ sum++; i++; j++; } } System.out.println(sum); } }
  • 相关阅读:
    一条长为L的绳子,一面靠墙,另外三边组成矩形,问此矩形最大面积能是多少?
    幸运的背后,总是靠自身的努力在支撑
    ZT:没有谁的成功是横空出世
    Node.js abaike图片批量下载爬虫1.02
    Node.js nvshens图片批量下载爬虫1.01
    Node.js meitulu图片批量下载爬虫1.051
    JDBC学习再小结
    JDBC学习小结
    day06_JDBC学习笔记
    MySQL学习小结
  • 原文地址:https://www.cnblogs.com/l199616j/p/10539736.html
Copyright © 2020-2023  润新知