熱門文章

2026年1月20日 星期二

ZeroJudge 解題筆記:b917. 11059 Maximum Product

作者:王一哲
日期:2026年1月20日


ZeroJudge 題目連結:b917. 11059 Maximum Product

解題想法


這題用兩層 for 迴圈硬算,假設要測試的數字存在串列 $nums$,依序測試從 $nums[i]$ 為首項,再乘以 $nums[j], (j < i)$ 到 $nums[-1]$,每次乘完之後更新最大值。時間複雜度約為 $O(n^2)$,可以通過測試。反而是輸出格式要小心,每一行測資對應的結果底下都要印出一行空行。

Python 程式碼


使用時間約為 9 ms,記憶體約為 2.9 MB,通過測試。
import sys

result = []
lines = sys.stdin.readlines()
idx = 0
ca = 0
while idx < len(lines):
    if not lines[idx].strip():
        idx += 1
        continue
    ca += 1
    n = int(lines[idx])
    idx += 1
    nums = list(map(int, lines[idx].split()))
    idx += 1
    imax = 0
    for i in range(n):
        curr = 1
        for j in range(i, n):
            curr *= nums[j]
            imax = max(imax, curr)
    result.append(f"Case #{ca:d}: The maximum product is {imax:d}.\n\n")
sys.stdout.write("".join(result))


C++ 程式碼


使用時間約為 2 ms,記憶體約為 32 kB,通過測試。
#include <cstdio>
typedef long long LL;

int main() {
    int ca = 0, n;
    while(scanf("%d", &n) != EOF) {
        ca++;
        int nums[n];
        LL imax = 0;
        for(int i=0; i<n; i++) scanf("%d", &nums[i]);
        for(int i=0; i<n; i++) {
            LL curr = 1;
            for(int j=i; j<n; j++) {
                curr *= nums[j];
                if (curr > imax) imax = curr;
            }
        }
        printf("Case #%d: The maximum product is %lld.\n\n", ca, imax);
    }
    return 0;
}


沒有留言:

張貼留言