90,第一个测试题没通过,求指教(Java)

P1047 [NOIP2005 普及组] 校门外的树

islandlfj @ 2022-10-22 12:51:09

import java.util.Scanner;

public class Main {

//第一行有两个整数,分别表示马路的长度 l和区域的数目 m。
//接下来 m 行,每行两个整数 u,v,表示一个区域的起始点和终止点的坐标。

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Scanner sc=new Scanner(System.in);
        //System.out.println("请输入马路长度l:");
        int l=sc.nextInt();
        //System.out.println("请输入区域数目m:");
        int m=sc.nextInt();
        int array1[][]=new int[m][2];
        int array2[]=new int[l+1];
        for(int i=0;i<array2.length;i++) {
            array2[i]=1;
        }
        //System.out.println("请输入区域的起始点u和终止点坐标v:");
        for(int i=0;i<m;i++) {
            int u=sc.nextInt();
            int v=sc.nextInt();
            array1[i][0]=u;
            array1[i][1]=v;
        }
        for(int k=0;k<m;k++) {
            for(int temp=array1[k][0]-1;temp<=array1[k][1]-1;temp++) {
                array2[temp]+=1;
            }
        }
        int count=0;//计数器
        for(int i=0;i<=l;i++) {
            if(array2[i]==1) {
                count++;
            }
        }
        System.out.println(count);

    }

}

by islandlfj @ 2022-10-22 15:16:50

已解决,之前没有考略到如果数组从0开始会出现下标越界的问题
import java.util.Scanner;

public class Main {

//第一行有两个整数,分别表示马路的长度 l和区域的数目 m。
//接下来 m 行,每行两个整数 u,v,表示一个区域的起始点和终止点的坐标。

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Scanner sc=new Scanner(System.in);
        //System.out.println("请输入马路长度l:");
        int l=sc.nextInt();
        //System.out.println("请输入区域数目m:");
        int m=sc.nextInt();
        int count=0;//计数器
        int array1[][]=new int[m][2];
        int array2[]=new int[l+1];
        for(int i=0;i<array2.length;i++) {
            array2[i]=1;
        }
        //System.out.println("请输入区域的起始点u和终止点坐标v:");
        for(int i=0;i<m;i++) {
            int u=sc.nextInt();
            int v=sc.nextInt();
            array1[i][0]=u;
            array1[i][1]=v;
        }
        for(int k=0;k<m;k++) {
            for(int temp=array1[k][0];temp<=array1[k][1];temp++) {
                array2[temp]+=1;
            }
        }
        for(int i=0;i<=l;i++) {
            if(array2[i]==1) {
                count++;
            }
        }
        System.out.println(count);

    }

}

|