第1题:好多鱼!

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

 

posted @ 2017-06-23 15:32  CYTing  阅读(320)  评论(0编辑  收藏  举报