주어진 정수 시퀀스는 시퀀스의 서브 시퀀스 (연속 위치의 정수)의 가장 큰 합계를 찾습니다. 하위 시퀀스는 비어있을 수 있습니다 (이 경우 합계는 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()
.