日期:2025年1月29日
ZeroJudge 題目連結:e623. 2. PPAP
解題想法
這題看起來好像不難,但是編號很容易算錯,尤其是某一輪或是某一組的最後一項。
Python 程式碼
使用時間約為 46 ms,記憶體約為 3.3 MB,通過測試。
n = int(input()) # 編號
m = 0 # 第 m 輪
s = 0 # 第 m 輪的數量,每次加 4
while n >= s+4: # 如果 n 的數量大於等於 s+4,還有下一輸,繼續執行
m += 1; s += 4 # m 加 1;s 加 4
n -= s # n 減去 s
if n == 0: # 剛好是第 m 輪的最後一個人
print("Pineapple pen") # 印出 Pineapple pen
else: # 要再到下一輪
m += 1 # m 加 1
if n%m == 0: n -= 1 # 如果 n 可以被 m 整除,剛好是某一項物品的最後一個,n 要減 1
item = n // m # 物品編號,取 n 除以 m 的整數部分
if item == 0: print("Pen") # 印出對應的物品名稱
elif item == 1: print("Pineapple")
elif item == 2: print("Apple")
else: print("Pineapple pen")
C++ 程式碼
使用時間約為 8 ms,記憶體約為 356 kB,通過測試。
#include <iostream>
using namespace std;
int main() {
ios::sync_with_stdio(0); cin.tie(0);
int n; cin >> n; // 編號
int m = 0, s = 0; // 第 m 輪;第 m 輪的數量,每次加 4
while(n >= s+4) { // 如果 n 的數量大於等於 s+4,還有下一輸,繼續執行
m++; s += 4; // m 加 1;s 加 4
n -= s; // n 減去 s
}
if (n == 0) { // 剛好是第 m 輪的最後一個人
cout << "Pineapple pen\n"; // 印出 Pineapple pen
} else { // 要再到下一輪
m++; // m 加 1
if (n%m == 0) n--; // 如果 n 可以被 m 整除,剛好是某一項物品的最後一個,n 要減 1
int item = n / m; // 物品編號,取 n 除以 m 的整數部分
if (item == 0) cout << "Pen\n"; // 印出對應的物品名稱
else if (item == 1) cout << "Pineapple\n";
else if (item == 2) cout << "Apple\n";
else cout << "Pineapple pen\n";
}
return 0;
}
沒有留言:
張貼留言