该题依旧是入门难度,并没有什么特别难的语法点,但是却有一些细节时常没有注意而导致错漏
先说思路:此题要求将马路上几个区域的树给挖掉,求最后剩余的树的数量,那么就要先对所有树进行标记,利用数组的内容,将所有树都放在一个数组中,进行标号,然后令这个数组中的所有元素都为0,即有树的地方标0,然后选取区域,在分别对各个区域进行条件判断,如果为0(有树)则令其为1(挖掉),这样就同时避免了重合的问题,然后再从第一颗树开始逐一进行判定,每次遇到标记为0的数就令剩余数n加一,最后将n输出即可
该过程中所遇到的问题:
1,L是长度,但是树的数目却应该是l+1,因为初末的树都要算进去,所以是数学模型的分析问题
此问题很严重,因为在系统排错的时候是不会报错的,因为语法完全没有问题,因此很难排查出来,往往答案非常接近,但就是不对,所以对于数学模型一定要仔细的分析,数据不能有差错。
2,该题的核心在于while(n–)这个循环,此处便是对于三个范围内的所有数进行判断,如果为0就变为1,要怎么表示一个范围内的所有数呢?我在此处遇到了难题,于是为了解决此难题,我开始进行尝试:
1,首先是用a[j]<=k<=b[j],可是运行了之后又发现数据错的离谱,后来发现那条式子在计算机中应该写成k>=a[j]&&k<=b[j],不过改过来后运行依旧是错误的
2,于是我开始尝试其他办法,即便是利用数组来控制依旧无法实现我所想要的那个区间,后来从数学方面入手,找到了突破口-----我要的是一个区间之内进行判断,但其实我根本不需要弄出那个区间,只要确保开始判断的第一个值与闭区间的左边是一样的,再加上对所用的for循环中,循环次数的控制就能使其控制这个区间的范围
3,后来,我又遇上了问题,那就是怎么设置变量,这个for循环里面要用a[m],b[m],如果用a[j],b[j]的话后面j++会打乱程序,可是上面用了m,下面开头也要a[m],但是这样的话要让其从这一项开始++的话就会出现数据的错乱,于是我引入了一个新的数组k[],它与a[]完全相同,这样的话我就可以在循环里面改k[],k[]改了之后也不会影响到函数的正常运行。
4,将k[p]在while(m–)函数里定义时,后续依旧会出错,在思考后猜测应该是p=m,可是在while(m–)函数中m的值却在减少,所以才会出错,于是把关于k[p]的定义都放到了外面,而此时又出了一个错误,就是直接输入a[m]=k[m],数组是不能比较和直接相等的,但是可以用一个循环,令数组内的每一位数都分别对应相等,于是需要拓展公式,写一个while(p–),用while循环就不用再多定义一些变量,当变量过多时可以考虑将for改为while。