Bei einer gegebenen Folge von ganzen Zahlen finden Sie die größte Summe einer Teilsequenz (ganze Zahlen an aufeinanderfolgenden Positionen) der Folge. Die Teilsequenz kann leer sein (in diesem Fall ist die Summe 0).
Die Eingabe wird von der Standardeingabe gelesen, eine Ganzzahl pro Zeile. Die größte Summe muss in die Standardausgabe geschrieben werden.
Ich habe einen kleinen Generator für Sie geschrieben:
#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;
}
Beispiele:
$ 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
ist meine Lösung./a.out
ist der Generator
Ihre Lösung muss für alle oben genannten Tests in angemessener Zeit ausgeführt werden (meine läuft im letzten Testfall in 1,2 Sekunden).
Der kürzeste Code gewinnt.
Bearbeiten : Bitte geben Sie ein Beispiel für einen der oben genannten Tests an.
while (i--);
sollte nicht mit einem Semikolon enden, oder?
#include <stdlib.h>
füratoi()
.