日期: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;
}
沒有留言:
張貼留言