Problema de matriz de lenguaje C _ árbol fuera de la puerta de la escuela _ notación

Descripción del Título

Hay una hilera de árboles en el camino con una longitud L fuera de la puerta de una escuela, y la distancia entre cada dos árboles adyacentes es de 11 metros. Podemos considerar la carretera como una recta numérica, un extremo de la carretera está en la posición 00 en la recta numérica y el otro extremo está en la posición LL; cada punto entero en la recta numérica es 0,1,2 , ..., L0,1,2, ..., L, ambos plantan un árbol.

Porque hay algunas zonas en el camino para construir el metro. Estas áreas están representadas por sus puntos inicial y final en la recta numérica. Se sabe que las coordenadas del punto de inicio y el punto final de cualquier región son números enteros, y puede haber partes superpuestas entre regiones. Ahora tenemos que quitar los árboles en estas áreas (incluidos los dos árboles al final del área). Su tarea es calcular cuántos árboles quedan en el camino después de que se eliminan todos estos árboles.

Ideas para resolver problemas

Con solo mirar el título, creo que las preguntas de esta matriz se centran en el tratamiento de las partes superpuestas. Tomando dos áreas de construcción como ejemplo, hay tres casos: 1: dos no se superponen; 2: dos se superponen (una está contenida en el otro)); 3: Parcialmente superpuesto. Al principio pensé que se haría simplemente enumerando cada situación, sumando y restando el número de árboles en la parte superpuesta, pero esto es muy complicado.

La mejor práctica para esta pregunta es usar el método de notación , es decir, primero crear una matriz, hacer que todos sus elementos sean '1' y modificar el valor en cada área de construcción a '0', para que no haya necesidad de preocuparse sobre demasiadas partes superpuestas Menos el árbol.

Código

#include <stdio.h>
#include <stdlib.h>

int main()
{
    
    
    int l,m,count=0,i,j;
    int a[101][2],lu[10001]={
    
    '\0'};		//a储存所有区域的始末位置; lu储存马路上的树的位置
    scanf("%d %d",&l,&m);
    for(i=0;i<l+1;i++)
        lu[i]=1;							//l为马路长度,每棵树距离1米,树的个数为l+1,这里将所有树的位置标记为‘1’
    for(i=0;i<m;i++)
    {
    
    
        scanf("%d %d",&a[i][0],&a[i][1]); 		//对m个区域的始末位置赋值
    }
    for(i=0;i<m;i++)
    {
    
    
        for(j=a[i][0];j<=a[i][1];j++)
        {
    
    
            lu[j]=0;							//将每个区域的所在路的区间的值覆盖为‘0’,表示此段路被用作建设
        }
    }
    for(i=0;i<l+1;i++)
        if(lu[i]==1)
            count++; 			//遍历lu,记录'1'的个数,即未被占用的树的数目
    printf("%d",count);

}

Supongo que te gusta

Origin blog.csdn.net/SingDanceRapBall/article/details/93503029
Recomendado
Clasificación