Dada una secuencia de enteros, encuentre la suma más grande de una subsecuencia (enteros en posiciones consecutivas) de la secuencia. La subsecuencia puede estar vacía (en cuyo caso la suma es 0).
La entrada se lee desde la entrada estándar, un número entero por línea. La suma más grande debe escribirse en la salida estándar.
Escribí un pequeño generador para ti:
#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;
}
Ejemplos:
$ 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
./sum
es mi solucion./a.out
es el generador
Su solución debe ejecutarse en un tiempo razonable para todas las pruebas anteriores (la mía se ejecuta en 1.2s en el último caso de prueba).
El código más corto gana.
Editar : proporcione un ejemplo ejecutado en una de las pruebas anteriores.
while (i--);
no debería terminar en punto y coma, ¿verdad?
#include <stdlib.h>
paraatoi()
.