Biorąc pod uwagę sekwencję liczb całkowitych, znajdź największą sumę podsekwencji (liczby całkowite na kolejnych pozycjach) sekwencji. Podsekwencja może być pusta (w takim przypadku suma wynosi 0).
Wejście jest odczytywane ze standardowego wejścia, jedna liczba całkowita na linię. Największa suma musi być zapisana na standardowe wyjście.
Napisałem dla ciebie mały generator:
#include <stdio.h>
#include <assert.h>
/* From http://en.wikipedia.org/wiki/Random_number_generation */
unsigned m_w;
unsigned m_z;
unsigned get_random()
{
m_z = 36969 * (m_z & 65535) + (m_z >> 16);
m_w = 18000 * (m_w & 65535) + (m_w >> 16);
return (m_z << 16) + m_w; /* 32-bit result */
}
int main(int argc, char **argv)
{
int i;
assert(argc == 3);
m_w = atoi(argv[1]);
m_z = atoi(argv[2]);
i = 10;
while (i--);
get_random();
i = atoi(argv[2]);
while (i--)
printf("%d\n", (int) get_random() << 8 >> 22);
return 0;
}
Przykłady:
$ printf "1\n2\n-1\n4\n" | ./sum
6
$ printf "0\n-2\n-3\n" | ./sum
0
$ ./a.out 1 1 | ./sum
387
$ ./a.out 1 10 | ./sum
571
$ ./a.out 1 100 | ./sum
5867
$ ./a.out 1 1000 | ./sum
7531
$ ./a.out 1 10000 | ./sum
27268
$ ./a.out 1 100000 | ./sum
101332
$ ./a.out 1 1000000 | ./sum
187480
$ ./a.out 1 10000000 | ./sum
666307
./sumto moje rozwiązanie./a.outjest generatorem
Twoje rozwiązanie musi zostać uruchomione w rozsądnym czasie dla wszystkich powyższych testów (moje działa w 1,2 sekundy w ostatnim przypadku testowym).
Najkrótszy kod wygrywa.
Edycja : Podaj przykładowy przebieg jednego z powyższych testów.
while (i--);nie powinien kończyć się średnikiem, prawda?
#include <stdlib.h>zaatoi().