牛牛有一个鱼缸。鱼缸里面已经有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(); } }