第1题:好多鱼!

时间:2021-04-04 22:05:35

牛牛有一个鱼缸。鱼缸里面已经有n条鱼,每条鱼的大小为fishSize[i] (1 ≤ i ≤ n,均为正整数),牛牛现在想把新捕捉的鱼放入鱼缸。鱼缸内存在着大鱼吃小鱼的定律。经过观察,牛牛发现一条鱼A的大小为另外一条鱼B大小的2倍到10倍(包括2倍大小和10倍大小),鱼A会吃掉鱼B。考虑到这个,牛牛要放入的鱼就需要保证:
1、放进去的鱼是安全的,不会被其他鱼吃掉
2、这条鱼放进去也不能吃掉其他鱼
鱼缸里面已经存在的鱼已经相处了很久,不考虑他们互相捕食。现在知道新放入鱼的大小范围[minSize,maxSize](考虑鱼的大小都是整数表示),牛牛想知道有多少种大小的鱼可以放入这个鱼缸。 

输入描述:
输入数据包括3行.
第一行为新放入鱼的尺寸范围minSize,maxSize(1 ≤ minSize,maxSize ≤ 1000),以空格分隔。
第二行为鱼缸里面已经有鱼的数量n(1 ≤ n ≤ 50)
第三行为已经有的鱼的大小fishSize[i](1 ≤ fishSize[i] ≤ 1000),以空格分隔。
输出描述:
输出有多少种大小的鱼可以放入这个鱼缸。考虑鱼的大小都是整数表示
输入例子:
1 12
1
1
输出例子:
3

代码:
//思路是:用2个数组分别存放鱼缸里的鱼和新捕捉的鱼,判断:
//当鱼缸里鱼的大小是新捕捉鱼的2倍到10时,删除新捕捉鱼数组对应的数
//反过来,当新捕捉鱼的大小是鱼缸里鱼的2倍到10时,删除新捕捉鱼数组对应的数
//用了ArrayList,但是在循环里面进行删除操作还是有问题,所有用置零替换删除
//最后统计非零的个数即可
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc
=new Scanner(System.in);
int minSize=sc.nextInt();//获取输入参数
int maxSize=sc.nextInt();
int n=sc.nextInt();
int[] fishSize=new int[n];
for(int i=0;i<n;i++){
fishSize[i]
=sc.nextInt();//鱼缸里的鱼的大小
}
List
<Integer> putSize=new ArrayList<Integer>();
for(int i=0;i<maxSize-minSize+1;i++){//新捕捉的鱼的大小
putSize.add(minSize+i);
}
for(int i=0;i<n;i++){//删除掉是鱼缸里已有鱼大小的2到10倍的鱼
for(int j=0;j<putSize.size();j++){
if(putSize.get(j)>=2*fishSize[i]&&putSize.get(j)<=10*fishSize[i]){
putSize.set(j,
0);
}
}
}
for(int i=0;i<putSize.size();i++){//反过来,鱼缸里已有鱼的大小可能是要放入鱼的2到10倍,也删除要放入的鱼
for(int j=0;j<n;j++){
if(fishSize[j]>=2*putSize.get(i)&&fishSize[j]<=10*putSize.get(i)){
putSize.set(i,
0);
}
}
}
int count=0;
for(int i=0;i<putSize.size();i++){
if(putSize.get(i)!=0)
count
++;
}
System.out.println(count);
sc.close();
}
}