# 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"))
```