首页 > 试题广场 >

六一儿童节

[编程题]六一儿童节
  • 热度指数:36186 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
六一儿童节,老师带了很多好吃的巧克力到幼儿园。每块巧克力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
首先给两个数组(存放每块巧克力的重量的数组和存放每一个孩子需要的巧克力的重量的数组)进行排序,然后拿出重量最少的一块巧克力按顺序跟孩子们需要的巧克力重量比较,找到符合条件的就把巧克力给他,把他的需求改成0,下次读到0就跳过,以此类推
import java.util.*;
public class Main {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner cin=new Scanner (System.in);
		int n=cin.nextInt();//孩子数量
		int  h[]=new int [n];//为了让第i个孩子上场需要的巧克力重量的数组
		for(int i=0;i<n;i++) {
			h[i]=cin.nextInt();//为了让第i个孩子上场需要的巧克力重量
		}
		int m=cin.nextInt();//巧克力数目
		int w[]=new int[m];//每一块巧克力的重量 的数组
		for(int i=0;i<m;i++) {
			w[i]=cin.nextInt();//每一块巧克力的重量 
		}
		Arrays.sort(h);
		Arrays.sort(w);
		int out=0;
		for(int i=0;i<m;i++) {
			for(int j=0;j<n;j++) {
				if(h[j]==0)continue;
				else if(w[i]>=h[j]) {
					
					out++;
					h[j]=0;
					break;
				}
			}
		}
		System.out.print(out);

	}

}


发表于 2019-11-04 15:54:02 回复(0)
public class SixOneChild {
    public static void main(String[] args) {
        Scanner in=new Scanner(System.in);
        int n=in.nextInt();
        int []h=new int[n];
        for(int i=0;i<n;i++){
            h[i]=in.nextInt();
        }
        int m=in.nextInt();
        int []w=new int [m];
        for(int i=0;i<m;i++){
            w[i]=in.nextInt();
        }
        int rs=getShownNum(h,w);
        System.out.println(rs);
    }

    private static int getShownNum(int[] h, int[] w) {
        int rs=0;
        Arrays.sort(h);
        for(int i=0;i<w.length;i++){
            for(int j=h.length-1;j>=0;j--){
                if(h[j]<=w[i]&&h[j]!=-1){
                    rs++;
                    h[j]=-1;
                    break;
                }
            }
        }
        return rs;
    }
}
编辑于 2019-06-13 22:14:40 回复(0)

/*

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

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Arrays;

public class Main {

public static void main(String[] args) throws Exception {
    // TODO Auto-generated method stub
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); 
    int n = Integer.parseInt(br.readLine());
    String str;
    String split[];
    str = br.readLine(); 
    split = str.split(" ");
    int[] hn = new int[split.length];
    // while there are words in the hn[] 
    for (int j = 0; j < split.length; j++) {      
        hn[j] = Integer.parseInt(split[j]);
    }

    int m = Integer.parseInt(br.readLine());
    str = br.readLine(); 
    split = str.split(" ");
    int[] Wm = new int[split.length];
    // while there are words in the Wm[] 
    for (int j = 0; j < split.length; j++) {      
        Wm[j] = Integer.parseInt(split[j]);
    }
    Arrays.sort(hn);
    Arrays.sort(Wm);
    int num=0;
    for(int i=0; i<Wm.length&&num<hn.length; i++) {
        if(Wm[i]>=hn[num])
            num++;                
        }

    System.out.print(num);
    }

// public static void bubbleSort(int[] arr) {
// int tmp;
// for(int i = 0; i<arr.length-1; i++) {
// for(int j=0; j<arr.length-1-i; j++) {
// if(arr[j]>arr[j+1]){
// tmp=arr[j];
// arr[j]=arr[j+1];
// arr[j+1]=tmp;
// }
// }
// }
// }

// public static void printArr(int[]arr) {
// for(int i:arr) {
// System.out.print(i+"");
// }
// System.out.println(); //输出一个换行符
// }
}

发表于 2019-06-02 22:52:29 回复(0)
public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int[] arr1 = new int[n];
        for(int i = 0;i<n;i++){
            arr1[i] = sc.nextInt();
        }
        int m = sc.nextInt();
        int[] arr2 = new int[m];
        for(int i = 0;i<m;i++){
            arr2[i] = sc.nextInt();
        }
        Arrays.sort(arr1);
        Arrays.sort(arr2);
        int index = 0;
        int count = 0;
        for(int i = 0;i<n&&i<m;i++){
            if(arr1[index]<=arr2[i]){
                count++;
                index++;
            }
        }
        System.out.println(count);
    }
感觉这个题没啥难度

发表于 2019-04-27 21:03:23 回复(0)
import java.io.*;
import java.util.Arrays;
public class Main {
    public static BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
    public static int []h,w;
    public static void main(String[]args)throws Exception {
        String str=br.readLine();
        int n=0,m=0;
        if(str!=null) {
            n=Integer.parseInt(str);
            h=new int[n];
            str=br.readLine();
            if(str!=null) {
                String []strarray=str.trim().split(" ");
                if(strarray.length<=n) {
                    for(int i=0;i<strarray.length;i++) {
                        h[i]=Integer.parseInt(strarray[i]);
                    }
                }
            }
        }
        str=br.readLine();
        if(str!=null) {
            m=Integer.parseInt(str);
            w=new int[m];
            str=br.readLine();
            if(str!=null) {
                String []strarray=str.trim().split(" ");
                if(strarray.length<=m) {
                    for(int i=0;i<strarray.length;i++) {
                        w[i]=Integer.parseInt(strarray[i]);
                    }
                }
            }
        }
        System.out.println(find(n,m,h,w));//输出结果
    }
    public static int find(int n,int m,int[] h,int []w) {
        int number=0;
        Arrays.sort(h);Arrays.sort(w);//从小到大排序
        int i=0,j=0;
        while(i<n && j<m){
            if(w[j]>=h[i]){
                number++;
                i++;
            }
            j++;
        }
        return number;
    }
}
 
发表于 2019-04-13 11:29:16 回复(0)
import java.util.Arrays;
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 flag = 0;
        Arrays.sort(h);
        Arrays.sort(w);
        for(int i=0;i<w.length&&flag<n;i++) {
            if(w[i]>=h[flag]) {
                flag++;
            }
        }
        
        System.out.println(flag);
    }
}
发表于 2019-02-22 11:38:30 回复(0)
//最小的巧克力给要求最小的学生
importjava.util.*;
publicclassMain{
publicstaticvoidmain(String[] args)
{
Scanner sc=newScanner(System.in);
intn=sc.nextInt();
int[]arr1=newint[n];
for(inti=0;i<n;i++){
arr1[i]=sc.nextInt();
}
intm=sc.nextInt();
int[]arr2=newint[m];
for(inti=0;i<m;i++){
arr2[i]=sc.nextInt();
}
Arrays.sort(arr1);
Arrays.sort(arr2);
intcount=0;
for(inti=0;i<arr1.length;i++){
for(intj=0;j<arr2.length;j++){
if(arr2[j]>=arr1[i]){
count++;
break;
}
}
}
System.out.println(count);
}
}
编辑于 2017-08-16 13:45:43 回复(0)
//都没用到w数组,我才用边输入边计算的方式。

importjava.util.Scanner;
publicclassMain {
 
    publicstaticvoidmain(String[] args) {
        chocolate();
    }
 
    publicstaticvoidchocolate(){
        Scanner scanner=newScanner(System.in);
        intn=scanner.nextInt();
        int[] h=newint[n];
        int[]flag =newint[n];
        inttemp,j;
        //边输入边直接插入排序(小到大排序)
        for(inti=0;i<n;++i){
            temp=scanner.nextInt();
            j=i-1;
            while(j>=0&&temp<h[j]){
                h[j+1]=h[j];
                j--;
            }
            h[j+1]=temp;
            flag[i]=0;
        }
        intm  = scanner.nextInt();
        //int[] w=new int[m];
        intnum=0;
        for(inti=0;i<m;++i){
            temp=scanner.nextInt();
            for(j=n-1;j>=0;--j){
                while(j>=0&&temp<h[j]){
                    j--;
                }
                if(j>=0&&flag[j]==0){
                    num++;
                    flag[j]=1;
                    break;
                }
            }
        }
        System.out.println(num);
    }
}

发表于 2017-08-11 11:48:14 回复(0)
package day03;
/**
 * @author 0.0
 * 可能有不对的地方,有啥我们一起讨论,谢谢
 */
import java.util.ArrayList;
import java.util.Scanner;

public class Children {
Scanner sc = new Scanner(System.in);
ArrayList<Integer> list1 = new ArrayList<Integer>();
ArrayList<Integer> list2 = new ArrayList<Integer>();
public void show() {
System.out.println("输入n,n为巧克力的总数");
int i1 = sc.nextInt();
System.out.println("输入"+i1+"个巧克力的重量");
for (int j = 0; j < i1; j++) {
int k = sc.nextInt();
list1.add(k);
}
System.out.println("输入n,n为小孩的总数");
int i2 = sc.nextInt();
System.out.println("输入"+i2+"个小孩需要的重量");
for (int j = 0; j < i2; j++) {
int k = sc.nextInt();
list2.add(k);
}
}
public int children(){
int temp = 0;// 记录一共有几个小孩数
int flag = 100;// 重量-小孩需要的最小值的小孩下标
for(int i = 0;i < list1.size();i ++){
for(int j = 0;j < list2.size();j ++){
int sum = 1000;// sum为重量 - 小孩需要的值(给这个数一个初始值)
if(list1.get(i) >= list2.get(j) ){
if(sum >= 0 &&  sum >= list1.get(i) - list2.get(j) ) {
sum = list1.get(i) - list2.get(j);
flag = j;
}
}
}
if(!list2.isEmpty()){
if(flag != 100){
list2.remove(flag);
temp ++;
}
}
}
return temp;
}
public static void main(String[] args) {
Children c = new Children();
c.show();
System.out.println(c.children());
}
}
发表于 2017-08-08 09:31:48 回复(0)