Data una sequenza di numeri interi, trova la somma più grande di una sottosequenza (numeri interi su posizioni consecutive) della sequenza. La sottosequenza può essere vuota (nel qual caso la somma è 0).
L'input viene letto dall'input standard, un numero intero per riga. La somma più grande deve essere scritta nell'output standard.
Ho scritto un piccolo generatore per te:
#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;
}
Esempi:
$ 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
è la mia soluzione./a.out
è il generatore
La soluzione deve essere eseguita in tempi ragionevoli per tutti i test sopra indicati (la mia viene eseguita in 1,2 secondi sull'ultimo test case).
Il codice più corto vince.
Modifica : Fornisci un esempio eseguito su uno dei test sopra.
while (i--);
non dovrebbe finire in un punto e virgola, giusto?
#include <stdlib.h>
peratoi()
.