10.11

洛谷数组题目 冰雹猜想 java

首先这道题就是一个用来测试while循环的题目 

如果用for循环的话 每次的n没办法再次判定 这时候用的是if语句 if语句没办法拐回去在判定一回 所以我们用while循环来解答此题

每次对n进行偶数奇数的操作时都会对n进行特判

代码如下:

Scanner scan =new Scanner(System.in);
        int[] arr=new int[1002];
        int n=scan.nextInt();
        int i=1;
        while(n!=1){
            arr[i]=n;
            i++;
            if(n%2==0){
                n=n/2;

            }
            else{
                n=n*3+1;
            }



        }
        arr[i]=1;
        for(int j=i;j>=1;j--){
            System.out.print(arr[j]+" ");
        }

由于n最后判定为1的时候会跳出whiel循环,这时候arr【i】是没有n赋值的 也就是说会出现0

来替代 因此我们需要将这时候的arr[i]直接赋值为1;这样才是完整的倒序输出,

洛谷 数组题 校门外的树

首先,需要明确的是 不同区间之间需要拔掉的树是可以重合的,那么如何处理这部分重合的树就是解这道题的关键。也就是“标记”

首先我们可以先把所有有树的标记一下,然后在根据区间来将数组里面的“树”一个个标记,也就是拔掉。

最后统计一下我们最开始进行标记的树木,也就是数组里面为0的个数,来得出哪些没有被区间覆盖。

代码如下:

Scanner scan =new Scanner(System.in);
        int L=scan.nextInt();
        int m=scan.nextInt();
        int sum=0;

        int[] arr=new int[10001];
        for(int i=0;i<=L;i++){
            arr[i]=0;
        }
        while (m>0) {
            m--;
            int u=scan.nextInt();
            int v=scan.nextInt();
            for(int i=u;i<=v;i++){
                if(arr[i]==0)
                    arr[i]=1;
            }

        }
for(int j=0;j<=L;j++){
    if(arr[j]==0) sum++;
}
System.out.print(sum);

需要注意的是开始开的数组是100 而题目中说的是10的四次方,开始开小了,交了一发显示re 开到10001 就直接ac了

洛谷 旗鼓相当的对手 java

  Scanner scan=new Scanner (System.in);
        int N=scan.nextInt();
        int S=N;
        int[] arr1=new int[1005];
        int[] arr2=new int[1005];
        int[] arr3=new int[1005];
        int[] arr4=new int[10005];
        int cnt=0;
        int i=0;
        while(N>0){

                arr1[i]=scan.nextInt();
                arr2[i]=scan.nextInt();
                arr3[i]=scan.nextInt();
                arr4[i]=arr1[i]+arr2[i]+arr3[i];
                N--;
            i++;
        }
        for(int k=0;k<S;k++){
            for(int j=k+1;j<S;j++){
                if (Math.abs(arr1[k] - arr1[j]) <= 5 &&
                        Math.abs(arr2[k] - arr2[j]) <= 5 &&
                        Math.abs(arr3[k] - arr3[j]) <= 5 &&
                        Math.abs(arr4[k] - arr4[j]) <= 10) {
                    cnt++;
                }

            }
        }
        System.out.print(cnt);
    

首先需要抓住题目中的关键的点就是 我们需要每次都要比较每个同学的语文数学英语的差值的不大于5 还有总分不大于10 给予这两点 我们可以开四个数组 三个数组记录每次每位同学的各科的分数 然后我们再来一次循环在比较每个同学比如arr1 1同学和arr1 2同学也就是1同学和2同学的语文的差值 。

值得注意的是我们需要取绝对值 因为小于5也有负数的情况也会算进去 会将旗鼓相当的对数变得更大。

采用Math.abs来对每科的数值的差值进行取绝对值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值