给定整数序列,可以找到该序列的子序列(在连续位置上的整数)的最大和。子序列可以为空(在这种情况下,总和为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.2s运行)。
最短的代码获胜。
编辑:请提供一个在上述测试之一上运行的示例。
我自己的c解决方案在最后一个测试用例上花了4秒钟,对您的解决方案非常感兴趣。
—
Dongshengcn
确保先写入文件,然后再从文件读取,并且不要使用管道。
—
亚历山德鲁
我猜您的生成器第25行有错误,
—
用户未知
while (i--);
不应以分号结尾,应该吗?
assert(argc == 3):-)这就是我所说的用户友好程序!:-)
—
伊曼纽尔·兰德霍尔姆
#include <stdlib.h>
的atoi()
。