Pagini recente » Cod sursa (job #2295338) | Cod sursa (job #529217) | Cod sursa (job #472894) | Cod sursa (job #2551278) | Cod sursa (job #467485)
Cod sursa(job #467485)
#include <stdio.h>
#include <stdlib.h>
//#include <conio.h>
int main()
{
int n, x, sum, i, best_sum = -20000, fst, last, *v, best_fst;
//se citesc datele
FILE * fin = fopen ("ssm.in", "r");
fscanf(fin, "%d", &n);
v = (int *) malloc (n * sizeof(int));
for(i = 0; i < n; i++)
fscanf(fin, "%d", v + i);
fclose(fin);
//suma initiala e v[0]
sum = v[0];
fst = 0;
last = 0;
//se parcurge vectorul
for(i = 1; i < n; i++)
{
x = v[i];
//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;
}
}
FILE *fout = fopen("ssm.out", "w");
for(i = best_fst; i <= last; i++)
fprintf(fout, "%d ", v[i]);
fclose(fout);
// getch();
return 0;
}