Witam. Robię zadanie polegające na wykonaniu sumy wszystkich 50-sięciu przedziałów znajdujących się w pliku, a następnie " w otrzymanym w ten sposób zbiorze wyszukaj najdłuższy nieprzerwany fragment zbioru. Jako rozwiązanie podaj zakres tego przedziału." (wartości A i B w przedziałach są liczbami całkowitymi z zakresu <-100,100>)
Mógłby ktoś doradzić co robię źle? moja odpowiedź ma zły koniec przedziału..
#include <iostream>
#include <fstream>
using namespace std;
struct S{
char odkad, przecinek, dokad;
int a, b;
};
S przedzialy[50];// <0, 200>
int suma[201];
void policz(int a, int b)
{
for(int i = a; i <= b; i++)
{
suma[i] = 1;
}
}
int main()
{
ifstream wczytaj("przedzialy.txt");
for(int i = 0; i < 50; i++)// wczytujemy dane
{
S X;
wczytaj >> X.odkad >> X.a >> X.przecinek >> X.b >> X.dokad;
X.a += 100; X.b += 100;
przedzialy[i] = X;
}
for(int i = 0; i < 50; i++)
{
S akt = przedzialy[i];
if(akt.odkad == '(' && akt.dokad == ')')
policz(akt.a+1, akt.b-1);
else if(akt.odkad == '(' && akt.dokad == '>')
policz(akt.a+1, akt.b);
else if(akt.odkad == '<' && akt.dokad == ')')
policz(akt.a, akt.b-1);
else// < >
policz(akt.a, akt.b);
}
// cout << '\n';
// for(int i = 0; i <= 200; i++)
// cout << "i = " << i << ": " << suma[i] << '\n';
// cout << '\n';
int najwiecej = 0;//0
int licznik = 0;//0
S wynik; wynik.odkad = '<'; wynik.dokad = '>'; wynik.przecinek = ',';
for(int i = 0; i <= 200; i++) // każda liczba jest przesunięta o 100//
{
if(suma[i] == 1)
{
licznik++;
if(licznik > najwiecej)//
{
najwiecej = licznik;
wynik.b = i;//
wynik.a = wynik.b-licznik+1;//
// 0 1 1 1 0 1 0 0 1 1 1 1 1
//-100 -99 -98 -97 -96 -95 -94 -93 -92 -91 -90 -89 -88
}
}
else
{
//cout << "konczymy i = " << i << ", na licznik = " << licznik << ", wynik(najwiecej): " << wynik.odkad << wynik.a << wynik.przecinek << ' ' << wynik.b << wynik.dokad << '\n';
licznik = 0;
}
}
wynik.a -= 100;
wynik.b -= 100;
cout << wynik.odkad << wynik.a << wynik.przecinek << ' ' << wynik.b << wynik.dokad << '\n';
return 0;
}