Дана послідовність цілих чисел знаходить найбільшу суму підрядності (цілих чисел на послідовних позиціях) послідовності. Субвенція може бути порожньою (у такому випадку сума дорівнює 0).
Введення зчитується зі стандартного введення, одне ціле число на рядок. Найбільша сума повинна бути записана на стандартний вихід.
Я написав для вас невеликий генератор:
#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;
}
Приклади:
$ 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
це моє рішення./a.out
є генератором
Ваші рішення повинні працювати в розумний час для всіх тестів, описаних вище (міна працює через 1,2 секунди в останньому тестовому випадку).
Найкоротший код виграє.
Редагувати : Наведіть приклад запуску одного з тестів, описаних вище.
while (i--);
не повинна закінчуватися крапкою з комою, чи не так?
#include <stdlib.h>
дляatoi()
.