题目描述
知识点分析
这道题主要是思维性问题,没有什么难度,如果考察的话可以是考察数组方面的内容。
代码部分
附上刚开始做的时候的代码
/**
* @author :Zeeland
* @date :Created in 2021/2/6 12:49
* @version: 1.0$
*/
import java.util.Scanner;
public class P1047 {
public static void main(String[] args) {
Scanner s =new Scanner(System.in);
while(s.hasNext()){
int l = s.nextInt();
int []arr =new int[l];
int m = s.nextInt();
for (int i = 0; i < m; i++) {
int start = s.nextInt();
int end = s.nextInt();
//边界问题
for(int j =start;j<=end;j++){
arr[j] = 1;
}
}
int count = 0;
for (int i = 0; i < arr.length; i++) {
if(arr[i] == 0){
count++;
}
}
System.out.println(count);
}
}
}
运行的时候却发现有三个运行时错误
想了一段时间才发现,马路的长度为L,但是却有L+1棵树,因此数次在设的时候不可以设为L,出现runtime error的原因是如果输入的区域为[x,500],那么这个时候你的程序就会报错数组越界异常
也就是下图中j<=end的位置发生了错误
解决方法,把数组长度修改为L+1就ok了
/**
* @author :Zeeland
* @date :Created in 2021/2/6 12:49
* @version: 1.0$
*/
import java.util.Scanner;
public class P1047 {
public static void main(String[] args) {
Scanner s =new Scanner(System.in);
while(s.hasNext()){
int l = s.nextInt();
int []arr =new int[l+1];
int m = s.nextInt();
for (int i = 0; i < m; i++) {
int start = s.nextInt();
int end = s.nextInt();
//边界问题
for(int j =start;j<=end;j++){
arr[j] = 1;
}
}
int count = 0;
for (int i = 0; i < arr.length; i++) {
if(arr[i] == 0){
count++;
}
}
System.out.println(count);
}
}
}