Cho một dãy số nguyên tìm tổng lớn nhất của một dãy con (số nguyên trên các vị trí liên tiếp) của dãy. Phần tiếp theo có thể để trống (trong trường hợp đó tổng bằng 0).
Đầu vào được đọc từ đầu vào tiêu chuẩn, một số nguyên trên mỗi dòng. Số tiền lớn nhất phải được ghi vào đầu ra tiêu chuẩn.
Tôi đã viết một máy phát điện nhỏ cho bạn:
#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;
}
Ví dụ:
$ 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
là giải pháp của tôi./a.out
là máy phát điện
Giải pháp của bạn phải chạy trong thời gian hợp lý cho tất cả các thử nghiệm ở trên (của tôi chạy trong 1,2 giây trong trường hợp thử nghiệm cuối cùng).
Mã ngắn nhất sẽ thắng.
Chỉnh sửa : Vui lòng cung cấp một ví dụ chạy trên một trong các bài kiểm tra ở trên.
while (i--);
không nên kết thúc bằng dấu chấm phẩy, phải không?
#include <stdlib.h>
choatoi()
.