Pagini recente » Cod sursa (job #841325) | Cod sursa (job #2644883) | Cod sursa (job #264929)
Cod sursa(job #264929)
#include <stdio.h>
#define NMAX 10000
//calculeaza subsecventa de suma minima si de lungime minima
//subsecventa -- pozitii consecutive
int a[NMAX], n;
int minim, li, ls;
int citire() // citire fisier intr-un vector de la 0 la n-1
{
FILE *f;
f = fopen("citire.in","r");
fscanf(f,"%d",&n);
for (int i = 0; i < n; i++)
{
fscanf(f,"%d",&a[i]);
}
fclose(f);
return 0;
}
int rezolvare()
{ //minim - valoare minima
//li - pozitia de inceput
//ls - pozitia de sfarsit
int pozst, pozsf;// pozitia de start si pozitia de final a sumei curente
int suma;
minim = a[0];
suma = a[0];
li = ls = 0;
pozst = pozsf = 0;
for (int i = 1; i < n; i++)
{
if (a[i] < 0)
{
if (suma >= 0)
{
suma = a[i];
if (minim > a[i]) {minim = a[i]; li = ls = i;}
pozst = pozsf = i;
}
else
{
pozsf = i;
suma += a[i];
}
}
if (a[i] >= 0)
{
if (suma >= 0)
{
if (minim > a[i]) {minim = a[i]; li = ls = i;}
suma = a[i];
pozst = pozsf = i;
}
else
{
if (minim > suma) {minim = suma; li = pozst; ls = pozsf;}
if (suma + a[i] < 0) {suma += a[i]; pozsf =i;}
else {suma = a[i]; pozsf = pozst = i;}
}
}
}
if (minim > suma) {minim = suma; li = pozst; ls = pozsf;}
return 0;
}
int afisare()
{
FILE *f;
f = fopen("afisare.out","w");
fprintf(f,"%d %d %d",minim,li+1,ls+1);
fclose(f);
return 0;
}
int main()
{
citire();
rezolvare();
afisare();
return 0;
}