- //#include <iostream>
- //#include <sstream>
- #include <bits/stdc++.h>
- using namespace std;
- // 定義鏈結串列的節點結構
- struct Monster {
- int attack;
- Monster* next;
- Monster(int atk) : attack(atk), next(nullptr) {}
- };
- // 插入新節點到鏈結串列
- void append(Monster*& head, int attack) {
- if (!head) {
- head = new Monster(attack);
- return;
- }
- Monster* temp = head;
- while (temp->next) {
- temp = temp->next;
- }
- temp->next = new Monster(attack);
- }
- // 釋放鏈結串列記憶體
- void freeList(Monster* head) {
- while (head) {
- Monster* temp = head;
- head = head->next;
- delete temp;
- }
- }
- int main() {
- string input;
- getline(cin, input);
-
- Monster* head = nullptr;
- stringstream ss(input);
- string token;
-
- // 讀取輸入並建立鏈結串列
- while (getline(ss, token, ',')) {
- append(head, stoi(token));
- }
-
- int hp = 100;
- int level = 1;
- Monster* temp = head;
-
- // 進行怪物對戰
- while (temp) {
- hp -= temp->attack;
- if (hp <= 0) {
- cout << "game over! dead at level " << level << endl;
- freeList(head);
- return 0;
- }
- temp = temp->next;
- level++;
- }
-
- cout << "game clear! hp left " << hp << endl;
- freeList(head);
- return 0;
- }
複製代碼 回復 1# may
------------------------------------------------\
程式說明:
定義 Monster 結構:
代表怪物的鏈結串列節點,每個節點包含 attack(攻擊力)和 next 指標。
函式 append():
用於向鏈結串列新增怪物。
函式 freeList():
用於釋放鏈結串列的記憶體,避免記憶體洩漏。
main() 函式:
讀取輸入字串,解析並建立鏈結串列。
進行戰鬥模擬,計算玩家 HP 的變化。
若 HP ≤ 0,輸出 "game over! dead at level X"。
若成功擊敗所有怪物,輸出 "game clear! hp left Y"。
最後釋放記憶體。
這樣的設計確保了對戰過程的順序性,並且使用鏈結串列來管理怪物資料。
-------------------------------------
測資
測資 00:
輸入:
10,20,30
預期輸出:
game clear! hp left 40
測資 01:
輸入:
50,50
預期輸出:
game over! dead at level 2
測資 02:
輸入:
25,25,25,25
預期輸出:
game over! dead at level 4
測資 03:
輸入:
5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5
預期輸出:
game over! dead at level 20
測資 04:
輸入:
100
預期輸出:
game over! dead at level 1
這些測資涵蓋不同情境,包括成功通關、HP 剛好歸零、過早死亡等情況。 |