Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- using namespace std;
- struct resultTab // struktura stworzona do zwracania największej podtablicy
- {
- int beg;
- int end;
- int sum;
- };
- int mod(int n) { return n >= 0 ? n : (-n); } // zwraca wartosc bezwzgledna liczby
- int sum(int i, int j, int *tab); //sumuje elementy od od tab[i] do tab[j] według podanego wzoru
- resultTab maxTab(int *tab, int tabElem); // znajduje najwieksza podtablicę
- int main()
- {
- int *tab;
- int sets;
- int tabSize;
- resultTab temp;
- while (!(cin >> sets && sets > 0)); // pomija bledne dane i zapetla sie az do wprowadzenia poprawnych
- for (int i = 0; i < sets; i++) // petla od liczby zestawow
- {
- while (!(cin >> tabSize && tabSize <= 10e6 && tabSize >= 1));// pomija bledne dane i zapetla sie az do wprowadzenia poprawnych
- tab = new int[tabSize]; // tworzy tablice n-elementowa
- for (int k = 0; k < tabSize; k++) // petla od liczb w poszczegolnych zestawach
- {
- while (!(cin >> tab[k] && mod(tab[k]) <= 2000)); // gdy wartosc przekracza 2000 to pomija i oczekuje na poprawne dane
- }
- temp = maxTab(tab, tabSize);
- cout << temp.beg << ", " << temp.end << ", " << temp.sum << endl;
- delete[]tab;
- }
- system("PAUSE");
- }
- int sum(int i, int j, int* tab)
- {
- int result = 0;
- if (i == j) // dla przypadku, gdy "sumujemy" jeden element
- {
- if (tab[i] < 0) return 0;
- else result = tab[i];
- }
- int negCounter = 0;
- for (int a = i; a <= j; a++) // sprawdza czy wszystkie elementy nie są ujemne, gdy są zwraca 0
- {
- if (tab[a] < 0) negCounter++;
- }
- if (negCounter == j - i +1) return 0;
- for (int k = i; k <= j; k++) // oblicza sumę według wzoru S=3*D+2*U
- {
- if (tab[k] >= 0) result += 3 * tab[k];
- else result += 2 * tab[k];
- }
- return result;
- }
- resultTab maxTab(int *tab, int tabElem)
- {
- resultTab t {};
- int tempSum;
- for (int i=0; i<tabElem; i++)
- for (int j = i; j < tabElem; j++)
- if ((tempSum = sum(i, j, tab) ) > t.sum)
- {
- t.beg = i;
- t.end = j;
- t.sum = tempSum;
- }
- return t;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement