Informatică, întrebare adresată de nonemas, 9 ani în urmă

Am nevoie de ajutor in legatura cu o problema:

 

Suma numere:

Andrei tocmai a invatat operatii cu numere intregi. Acum doreste sa exerseze adunarea. Astfel el scrie la intamplare un sir de numere intregi pe care le insumeaza. Analizand rezultatele sale a bservat ca insumand doar secvente de numere consecutive din sirul numerelor sale poate obtine sume mai mari sau mai mici. Andrei si-a propus sa determine valoarea celei mai mari sume.

 

Cerinta:

 

Sa se scrie un program care determina valoarea celei mai mari sume care se poate obtine adunand doar numere consecutive dintr-un sir de numere intregi.

 

Date de intrare:

Din fisierul numere.in se citesc de pe randuri diferite pana la un milion de numere intregi cu cel mult trei cifre de fiecare

 

Date de iesire:

In fisierul numere.out se scrie pe prima linie valoarea sumei cerute.

 

Exemple:

numere.in: 5 2 3 -20 1 6

numere.out: 10

numere.in:1 2 -10 -20 1 5 -1 7 -20 -30

numere.out:12

Răspunsuri la întrebare

Răspuns de Utilizator anonim
1
O să îl scriu în C++, cum intră în Code::Blocks.
#include<fstream>
using namespace std;
int main()
{
ifstream f("numere.in");ofstream g("numere.out");
//short int v[1000000]; //în principiu, dar ar crăpa în realitate, așa că facem rost altfel:
short int *v=new short int[1000000];
int n,Smax=0;
cin>>n;
for(int i=0;i<n;i++)f>>v[i];
for(int i=0;i<n;i++)
{
int S=0,lSmax=0;
for(int j=i;j<n;j++)
{
S+=v[i];
if(S>lSmax)lSmax=S;
}
if(lSmax<Smax)Smax=lSmax;
}
g<<Smax;
delete v; f.close(); g.close();
return 0;
}

Utilizator anonim: Faza cu new e mai aiurea (eu m-am învățat cu stilul din C standard, anume (short int)malloc(1000000*sizeof(short int)), dar e un pic mai nașpa și plus că incluzi <cstdio> :)) Stiva nu prea poate să ajungă la 2 MB și ceva cât cere ăsta așa că am luat mai multă memorie :))
Utilizator anonim: Am pus la sfârșit „delete v” din același scop în care se pune și f.close() și g.close() -- curățenie.
Alte întrebări interesante