Problème de tableau de langage C _ arbre en dehors de la porte de l'école _ notation

Description du titre

Il y a une rangée d'arbres sur la route avec la longueur L à l'extérieur de la porte d'une école, et la distance entre tous les deux arbres adjacents est de 11 mètres. Nous pouvons considérer la route comme une droite numérique, une extrémité de la route est à la position 00 sur la droite numérique et l'autre extrémité est à la position LL; chaque point entier sur la droite numérique est 0,1,2 , ..., L0,1,2, ..., L, plantent tous les deux un arbre.

Parce qu'il y a des zones sur la route pour construire le métro. Ces zones sont représentées par leurs points de départ et d'arrivée sur la droite numérique. On sait que les coordonnées du point de départ et du point final de n'importe quelle région sont des nombres entiers et qu'il peut y avoir des parties qui se chevauchent entre les régions. Nous devons maintenant supprimer les arbres dans ces zones (y compris les deux arbres à la fin de la zone). Votre tâche consiste à calculer le nombre d'arbres restant sur la route après que tous ces arbres ont été supprimés.

Idées de résolution de problèmes

En regardant simplement le titre, j'estime que les questions de ce tableau se concentrent sur le traitement des parties qui se chevauchent. En prenant deux zones de construction comme exemple, il y a trois cas: 1: deux ne se chevauchent pas; 2: deux se chevauchent (un est contenu dans l'autre)); 3: Se chevauchent partiellement. Au début, je pensais que cela se ferait simplement en énumérant chaque situation, en ajoutant et en soustrayant le nombre d'arbres dans la partie qui se chevauchent, mais c'est très compliqué.

La meilleure pratique pour cette question est d'utiliser la méthode de notation , c'est-à-dire de créer d'abord un tableau, de rendre tous ses éléments '1' et de modifier la valeur de chaque zone de construction sur '0', de sorte qu'il n'y ait pas lieu de s'inquiéter trop de parties qui se chevauchent Moins l'arbre.

Code

#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);

}

Je suppose que tu aimes

Origine blog.csdn.net/SingDanceRapBall/article/details/93503029
conseillé
Classement