Va rog, ajutati-ma cu urmatoarea problema (C++):
Se citeste de la tastatura n, si apoi n perechi de cate doua numere intregi a si b cu ( a<0<b)
numere ce reprezinta capetele unor intervale inchise. Afisati pe ecran , doua numere x si y ce
reprezinta capetele intervalului intersectie al celor n intervale date.
De exemplu, pentru n=3 si perechile [-1,20], [-4,9], [-7, 12] , obtinem solutia x= -1 si y= 9.
Multumesc mult!
Răspunsuri la întrebare
#include <stdio.h>
#include <stdlib.h>
typedef struct Interval {
int x;
int y;
} Interval;
int intersectie(Interval* solutie, Interval* intervale, int numar_intervale) {
(*solutie).x = intervale[0].x;
(*solutie).y = intervale[0].y;
for (int i = 1; i < numar_intervale; i++) {
if (intervale[i].x > (*solutie).x) {
(*solutie).x = intervale[i].x;
}
if (intervale[i].y < (*solutie).y) {
(*solutie).y = intervale[i].y;
}
}
if ((*solutie).x > (*solutie).y) {
return -1;
}
return 0;
}
int main() {
int numar_intervale;
Interval* intervale;
Interval solutie;
// Citesc numarul de intervale
printf("Dati numarul de intervale:\n");
scanf("%d", &numar_intervale);
// Aloc memorie pentru intervale
intervale = (Interval*) malloc(sizeof(Interval) * numar_intervale);
// Citesc toate intervalele
for (int i = 0; i < numar_intervale; i++) {
printf("Dati intervalul cu numarul %d:\n", i + 1);
scanf("%d %d", &intervale[i].x, &intervale[i].y);
}
// Calculez solutia, daca exista
if (intersectie(&solutie, intervale, numar_intervale)) {
printf("Nu exista interval\n");
} else {
printf("Intervalul este: %d %d.\n", solutie.x, solutie.y);
}
// Eliberez memoria
free(intervale);
return 0;
}