日期:2025年9月29日
ZeroJudge 題目連結:e623. 2. PPAP
解題想法
先用一個 while 迴圈,計算序號 n 是第 m 輪領到東西,計算時每一輪會將 n 減去這一輪的數量。跑完 while 迴圈之後,如果 n 等於 0,代表是第 m 輪的最後一個人,印出 Pineapple pen; 反之進到下一輪,先將 m 加 1,計算 n 對 m 取整數除法的結果,輸出對應的物品名稱。
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
item = 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;
}
沒有留言:
張貼留言