1.六一儿童节---贪心算法
思路:本题考查的是贪心算法
可以采用的思路是将学生和巧克力都进行排序,然后进行贪心算法,就是将最小的巧克力给最小的学生,如果巧克力大于等于最小的学生则计算+1,同时将学生的下表+1(类似于遍历);直到所有的学生都有糖果break掉
代码-java
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();
}
Arrays.sort(h);//学生排序
Arrays.sort(w);//巧克力排序
int stustart=0;
int count=0;
//巧克力给学生
for(int i=0;i<w.length;i++){
if(w[i]>=h[stustart]){// 如果最小的巧克力比最小的学生要的大
count++;// 那就把这个糖果给他,count加1
stustart++;// 给他后,把最小的学生加一
if(stustart==n)// 如果最后一个学生都有糖了,就不找了,break掉
break;
}
}
System.out.println(count);
}
}
2。最大乘积 两个
题目:
思路:本题的重点是找到 输入数据中的最大值max1,次大值max2,第三大值max3以及最小值min1,次小值min2如果存在负数的话就是负负得正了
代码:java
import java.util.Arrays;
import java.util.Scanner;
public class Main{
public static void main(String[] args){ni gu
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();//获取键盘输入
long[] array=new long[n];
for(int i=0;i<n;i++){
array[i] = sc.nextLong();
}
getLargestMul(array,n);
}
public static void getLargestMul(long[] num,int len){
long max1=0,max2=0,max3=0,min1=0,min2=0;
for(int i=0;i<len;i++){
if(num[i]!=0){
if(num[i]>max1){
max3=max2;
max2=max1;
max1=num[i];
}
else if(num[i]>max2){
max3=max2;
max2=num[i];
}
else if(num[i]>max3){
max3=num[i];
}
else if(num[i]<min1){
min2=min1;
min1=num[i];
}
else if(num[i]>min1 && num[i]<min2){
min2=num[i];
}
}else continue;
}
long max=Math.max(max1*max2*max3,max1*min1*min2);
System.out.print(max);
}
}