日期:2025年6月20日
ZeroJudge 題目連結:a005. Eva 的回家作業
解題想法
用迴圈檢查前 4 項是等差或等比數列,再補上第 5 項,最後輸出這 5 項。
Python 程式碼
使用時間約為 16 ms,記憶體約為 3.3 MB,通過測試。
t = int(input())
for _ in range(t):
arr = list(map(int, input().split()))
state = True # True 為等差, False 為等比
d = arr[1] - arr[0] # 公差
for i in range(1, 3): # 檢查 arr[1] ~ arr[3]
if arr[i+1] - arr[i] != d: # 如果差不相等,為等比數列
state = False
break
if state: # 等差數列
arr.append(arr[3] + d)
else: # 等比數列,題目保證是整數
arr.append(arr[3] * (arr[3] // arr[2]))
print(*arr)
C++ 程式碼
使用時間約為 1 ms,記憶體約為 88 kB,通過測試。
#include <cstdio>
using namespace std;
int main() {
int t; scanf("%d", &t);
while(t--) {
int arr[5];
for(int i=0; i<4; i++) scanf("%d", &arr[i]);
bool state = true; // true 為等差, false 為等比
int d = arr[1] - arr[0]; // 公差
for(int i=1; i<3; i++) { // 檢查 arr[1] ~ arr[3]
if (arr[i+1] - arr[i] != d) { // 如果差不相等,為等比數列
state = false;
break;
}
}
if (state) arr[4] = arr[3] + d; // 等差數列
else arr[4] = arr[3] * (arr[3] / arr[2]); // 等比數列,題目保證是整數
for(int i=0; i<4; i++) printf("%d ", arr[i]);
printf("%d\n", arr[4]);
}
return 0;
}
沒有留言:
張貼留言