日期:2025年3月17日
ZeroJudge 題目連結:f707. 幸運 7 (Lucky Seven)
解題想法
這題考排序,需要自訂排序的比較式。
Python 程式碼
使用時間約為 45 ms,記憶體約為 3.9 MB,通過測試。
import sys
from functools import cmp_to_key
def mycmp(a, b):
if a%7 == 0 and b%7 != 0: return -1 # a 可以被 7 整除但 b 不行,a 往前放
elif a%7 != 0 and b%7 == 0: return 1 # a 不行被 7 整除但 b 可以,a 往後放
elif a%7 == 0 and b%7 == 0: # a、b 都可以被 7 整除
if a%70 > b%70: return -1 # a 除以 70 的餘數比較大,a 往前放
elif a%70 < b%70: return 1 # a 除以 70 的餘數比較小,a 往後放
else: return 0
else: # a、b 都不行被 7 整除
if a%77 < b%77: return -1 # a 除以 77 的餘數比較小,a 往前放
elif a%77 > b%77: return 1 # a 除以 77 的餘數比較大,a 往後放
else: return 0
for line in sys.stdin:
arr = list(map(int, line.split()))[:-1] # 轉成整數串列並去掉最後一項
arr.sort(key = cmp_to_key(mycmp)) # 排序
print(arr[0]) # 最大值在首項
C++ 程式碼
使用時間約為 2 ms,記憶體約為 348 kB,通過測試。
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
ios::sync_with_stdio(0); cin.tie(0);
int a; // 儲存資料用的變數
while(cin >> a) {
vector<int> arr = {a}; // 儲存資料用的陣列
while(true) { // 無窮迴圈
cin >> a; // 讀取 a
if (a == 0) break; // 如果 a 等於 0 中止迴圈
arr.push_back(a); // 將 a 加入 arr
}
sort(arr.begin(), arr.end(), [] (int x, int y) {
if (x%7 == 0 && y%7 != 0) return true; // x 可以被 7 整除但 y 不行回傳 true
else if (x%7 != 0 && y%7 == 0) return false; // x 不行被 7 整除但 y 可以回傳 false
else if (x%7 == 0 && y%7 == 0) return x%70 > y%70; // x、y 都可以被 7 整除,回傳 x%70 > y%70
else return x%77 < y%77; // 最後一種狀況,回傳 x%77 < y%77
} ); // 排序
cout << arr[0] << "\n"; // 最大值在首項
}
return 0;
}
沒有留言:
張貼留言