Fişierul text BAC.TXT conţine pe prima linie un număr natural nenul n (1≤n≤1000), iar pe
fiecare dintre următoarele n linii, câte două numere întregi a şi b (1≤a≤b≤32000), fiecare
pereche reprezentând un interval închis de forma [a,b]. Scrieţi un program C/C++ care
determină intervalele care au proprietatea că intersecţia cu oricare dintre celelalte n-1
intervale este vidă şi afişează pe câte o linie a ecranului, separate printr-un spaţiu,
numerele care reprezintă capetele intervalelor determinate.
Exemplu: dacă fişierul BAC.TXT are conţinutul alăturat,
4
17 20
2 6
10 15
8 16
pe ecran se va afişa:
2 6
17 20
Răspunsuri la întrebare
Răspuns de
6
Facem doi vectori
a[n] care are toate limitele inferioare ale intervalelor(in ex nostru: 17,2,10,8)
si b[n] care are toate limitele inferioare ale intervalelor(in ex nostru: 20,6,15,16)
Un interval nu se intersecteaza cu celelalte daca are ambele capete mai mici decat inceputul unui interval sau ambele capete mai mari decat sfarsitul unui interval. Initiem un vector intervale_ind(independente) cu 1 presupunand ca toate intervalele nu se intersecteaza.
Apoi trecem prin fiecare membru al vectorilor, testand regula de mai sus. Daca se intersecteaza, atunci setam intervale_ind cu 0
La final, o sa afisam toate intervalele care au in continuare intervale_ind=1
#include <iostream>
#include <fstream>
using namespace std;
int main(){
int n,i,j,ok;
ifstream fib("bac.txt");
fib>>n;
int a[n],b[n],interval_ind[n];
for(i=0;i<n;i++){
fib>>a[i]>>b[i];
//presupunem ca toate sunt initial intervale independente, fara intersectii
interval_ind[i]=1;
}
for(i=0;i<n-1;i++){
ok=1;
for(j=i+1;j<n;j++){
if(!((a[i]<a[j]&&b[i]<a[j])||(a[i]>b[j]&&b[i]>b[j]))){
interval_ind[j]=0;
ok=0;
}
}
if(ok==0&&interval_ind[i]==1){
interval_ind[i]=0;
}
}
for(i=0;i<n;i++){
//cout<<interval_ind[i]<<endl;
if(interval_ind[i]==1){
cout<<a[i]<<" "<<b[i]<<endl;
}
}
return 0;
}
a[n] care are toate limitele inferioare ale intervalelor(in ex nostru: 17,2,10,8)
si b[n] care are toate limitele inferioare ale intervalelor(in ex nostru: 20,6,15,16)
Un interval nu se intersecteaza cu celelalte daca are ambele capete mai mici decat inceputul unui interval sau ambele capete mai mari decat sfarsitul unui interval. Initiem un vector intervale_ind(independente) cu 1 presupunand ca toate intervalele nu se intersecteaza.
Apoi trecem prin fiecare membru al vectorilor, testand regula de mai sus. Daca se intersecteaza, atunci setam intervale_ind cu 0
La final, o sa afisam toate intervalele care au in continuare intervale_ind=1
#include <iostream>
#include <fstream>
using namespace std;
int main(){
int n,i,j,ok;
ifstream fib("bac.txt");
fib>>n;
int a[n],b[n],interval_ind[n];
for(i=0;i<n;i++){
fib>>a[i]>>b[i];
//presupunem ca toate sunt initial intervale independente, fara intersectii
interval_ind[i]=1;
}
for(i=0;i<n-1;i++){
ok=1;
for(j=i+1;j<n;j++){
if(!((a[i]<a[j]&&b[i]<a[j])||(a[i]>b[j]&&b[i]>b[j]))){
interval_ind[j]=0;
ok=0;
}
}
if(ok==0&&interval_ind[i]==1){
interval_ind[i]=0;
}
}
for(i=0;i<n;i++){
//cout<<interval_ind[i]<<endl;
if(interval_ind[i]==1){
cout<<a[i]<<" "<<b[i]<<endl;
}
}
return 0;
}
Alte întrebări interesante
Limba română,
9 ani în urmă
Limba română,
9 ani în urmă
Limba română,
9 ani în urmă
Matematică,
9 ani în urmă
Limba română,
9 ani în urmă
Limba română,
9 ani în urmă
Geografie,
9 ani în urmă