CodeSprout程式萌芽
← 返回題庫 Java 基礎語法 / 第 282 題 操作教學 ↗
困難Java 物件導向

282. 帳戶結餘

Java 物件導向封裝物件狀態交易

帳務模擬器依序處理三個帳戶的存款、提款及轉帳,並產生指定報表。每筆交易必須完整遵守下方的餘額與費用規則。

建立帳號 0、1、2 的三個 Account 物件;每個帳戶的初始餘額皆為 3。每次呼叫 solve 都重新建立帳戶,不沿用上次呼叫的狀態。

指令格式與執行順序
commands 每列為 [種類, 帳號, 金額]。按陣列原順序逐筆執行,每筆使用上一筆完成後的餘額。
- 種類 0:將要求金額存入指定帳戶,不收費。
- 種類 1:從指定帳戶提領,依下方規則決定是否接受及實際金額。
- 種類 2:從指定帳戶轉給下一帳號 (帳號 + 1) % 3;0 轉給 1、1 轉給 2、2 轉給 0。

提領及轉帳的金額與費用
以下 B 是本筆指令執行前的來源帳戶餘額,A 是指令要求的正整數金額,F = 1 是固定費用。『餘額足夠』是指足以支付要求金額及費用,即 B >= A + F;不能只比較 B 與 A。

本題採『不得透支;不足則整筆拒絕』,提領與轉帳都使用同一規則:
1. B >= A + F:接受並完整執行要求金額 A,來源帳戶扣除 A + F。
2. B < A + F:整筆拒絕,不扣金額、不扣費用,所有帳戶保持原狀。
不得縮減要求金額,也不得讓來源帳戶餘額變成負數。

接受提領時,來源帳戶扣除 A + F;接受轉帳時,先確認可支付 A + F,再一次更新兩個帳戶:來源扣除 A + F,下一帳戶只增加要求金額 A,費用不進入任何帳戶。
拒絕指令不計成功,並計一次失敗。存入一定成功且不收費;接受的提領、轉帳各算一次成功。金額必須為正整數,沒有只扣費用的零金額交易。

金額不足範例
例如,提款前餘額 6、要求提領 9、費用 1:因 6 < 9 + 1,整筆拒絕,餘額仍為 6。

回傳結果
輸出帳號 0、1、2 的最後餘額。回傳恰有 3 個元素的清單 [帳號0餘額, 帳號1餘額, 帳號2餘額];空 commands 回傳 [3, 3, 3]。

請使用 Java 完成 Solution.solve;直接回傳資料,不使用 Scanner 或自行讀取標準輸入。

傳入的資料

commands:int[][],唯一一個函式參數。每列恰有 3 個整數 [種類, 帳號, 金額];種類只會是 0、1、2,帳號只會是 0、1、2,金額為正整數。JSON args 的最外層陣列用於包住這一個 commands 參數。

回傳的答案

帳號 0、1、2 的最後餘額。

範例 1
傳入[[]]
回傳[3, 3, 3]
範例 2
傳入[[[0, 0, 5]]]
回傳[8, 3, 3]

commands 不為 null,指令數為 0~40。每列不為 null 且恰有 3 個元素;種類與帳號均為 0~2,金額為 1~1000。初值與固定費用以題目指定為準。全部計算及回傳整數均在 Java int 範圍內。空指令陣列不執行任何交易。

💡 給我一點提示+

先逐條寫出資料轉換與分支規則,確認空輸入及邊界,再處理一般案例。

小提醒

使用 Java,在 public class Solution 中完成題目指定型別的 public static solve(...) 方法,以 return 回傳答案。可加入 import、輔助類別與方法;保留入口型別,不需撰寫 main 或讀取輸入。

雲端草稿 PRO
跨裝置接續尚未提交的程式
</>你的程式碼
Java
本機草稿自動保存Tab 縮排・Esc 再 Tab 離開編輯器 ⌘ / Ctrl + Enter 測試

測試會執行 3 組公開案例與你新增的自訂案例。 登入後可提交程式,通過全部公開與隱藏測資後標記完成。

登入後提交

公開案例固定為 3 組。自訂案例只用於測試,不納入提交評分。0 / 17 組自訂案例

測試在瀏覽器內執行,不會標記完成或增加 XP。Java 首次載入需要網路。 Java 環境由 CheerpJ 提供。