# 106正式試題 ## pA. 計算含有 s 或 S 字母的字數 ```python= for _ in range(int(input())): a = input().split() ans = 0 for i in a: if "S" in i or "s" in i: ans += 1 print(ans) ``` ## pB. 給一個羅馬數字符號,轉為整數數字 ```python= key = {"I":1, "V":5, "X":10, "L":50, "C":100, "D":500, "M":1000} for _ in range(int(input())): n = input() pre = 0 ans = 0 for i in n: value = key[i] if value > pre: ans += value - 2*pre else: ans += value pre = value print(ans) ``` ## pC. 信用卡卡號 ```python= for _ in range(int(input())): n = input() ans = 0 for i in range(len(n)): i = int(i) if i%2: ans += int(n[i]) else: if int(n[i])*2 >= 10: ans += int(str(int(n[i])*2)[1])+1 else: ans += int(n[i])*2 print("F" if ans%10 else "T") ``` ## pD. 幾 A 幾 B ```python= def dfs(n, d): if len(n) == len(d): now.add(d) for i in n: if i not in d: dfs(n, d+i) for _ in range(int(input())): n, i, j = map(int, input().split(",")) now = set() dfs(str(n), "") now = sorted(now) i = now[i-1] j = now[j-1] A, B = 0, 0 for v in i: if v in j: if i.index(v) == j.index(v): A += 1 else: B += 1 print(f"{A}A{B}B") ``` ## pE. 網段廣播位址 ```python= for _ in range(int(input())): a, b = input().split("/") a = [int(i) for i in a.split(".")] b = [int(i) for i in b.split(".")] for i in range(len(a)): a[i] = a[i] | ~b[i]+256 print(".".join(map(str, a))) ``` ## pF. 大數排序問題 ```python= for _ in range(int(input())): num = [int(i) for i in input().split(", ")] n = sorted(num.copy()) for i in range(1, len(num)+1): num[num.index(n[i-1])] = i print(", ".join(map(str, num))) ``` ## pG. 樹 ChatGPT ```python= from collections import defaultdict # 建立鄰接表 def build_graph(edges): graph = defaultdict(list) for u, v in edges: graph[u].append(v) graph[v].append(u) return graph # 檢查無向圖是否有迴圈,並輸出結果 def check_graph(edges): graph = build_graph(edges) visited = set() cycle_nodes = [] is_connected = True # 檢查是否為單連通圖 start_node = next(iter(graph)) # 任意選擇起始節點 def dfs(node, parent, path): visited.add(node) path.append(node) for neighbor in graph[node]: if neighbor not in visited: if dfs(neighbor, node, path): return True elif neighbor != parent: # 形成了迴圈,記錄迴圈節點 cycle_start_index = path.index(neighbor) cycle_nodes.extend(path[cycle_start_index:]) return True path.pop() return False # 若找到迴圈則返回迴圈節點 if dfs(start_node, -1, []): return sorted(cycle_nodes) # 若無迴圈,確認是否為單連通圖 if len(visited) != len(graph): return "F" return "T" # 測試範例 for _ in range(int(input())): edges = [eval(i) for i in input().split()] result = check_graph(edges) if type(result) == list: print(", ".join(map(str, result))) else: print(result) ``` ## pH. 後序運算式 ```python= for _ in range(int(input())): data = list(input().split())[::-1] stack = [] while data != []: num_or_op = data.pop() try:#int eval(num_or_op) stack.append(num_or_op) except:#op b = stack.pop() a = stack.pop() stack.append(str(eval(a+num_or_op+b))) print(format(float(stack[0]),".0f")) ```