Pagini recente » Cod sursa (job #860982) | Cod sursa (job #434462) | Cod sursa (job #2945537) | Cod sursa (job #432547) | Cod sursa (job #467487)
Cod sursa(job #467487)
#include <stdio.h>
#include <stdlib.h>
//#include <conio.h>
int main()
{
int n, x, sum, i, best_sum = -20000, fst, last, best_fst;
//se citesc datele
FILE * fin = fopen ("ssm.in", "r");
fscanf(fin, "%d", &n);
fscanf(fin, "%d", &x);
//suma initiala e v[0]
sum = x;
fst = 0;
last = 0;
//se parcurge vectorul
for(i = 1; i < n; i++)
{
fscanf(fin, "%d", &x);
//daca suma e mai mica decat 0 => se porneste subsirul
//primul indice = i
//suma = x (cea mai buna suma e in best_sum si dintr-o suma negativa n-ai decat cum sa scazi..
//daca x-ul e pozitiv suma + x < x => vrem sa retinem suma
//daca x=ul e negativ suma + x < x (ca e x - ceva pozitiv, suma fiind negativa)
//luati pe un exemplu.. si unde setati fst deschideti interval
if (sum < 0)
{
fst = i;
sum = x;
}
else
//altfel - se adauga x la suma
sum += x;
//daca suma curenta e mai buna decat cea mai buna de pana acum - se retine
if(best_sum < sum)
{
best_sum = sum;
best_fst = fst;
last = i;
}
}
fclose(fin);
FILE *fout = fopen("ssm.out", "w");
fprintf(fout, "%d %d %d", best_sum, best_fst, last);
//for(i = best_fst; i <= last; i++)
// fprintf(fout, "%d ", v[i]);
fclose(fout);
// getch();
return 0;
}