---
# System prepended metadata

title: ITSA E-tutor  Mathematics I Python Version
tags: [python]

---

# ITSA E-tutor  Mathematics I Python Version
{%hackmd BJrTq20hE %}
###### tags: `python`
:::warning
:warning:**Warining :**
1. If you have **NOT** read  "[Python Basic Notes"](https://hackmd.io/@cheung4843/HycouTvtu) which is designed for the beginners, please read that first.
2. **Do Not merely take a glance at these codes, please try them hands-on.**
3. Some solutions are **NOT** optimal, however, they are relatively easy and Intuitive for the beginners.
:::

:::info
:blue_book: **The Method Of Use :**
1. Here are most solutions to [this problem database](https://e-tutor.itsa.org.tw/e-Tutor/mod/programming/index.php?id=284).  Please  register an account on e-tutor first, clicking [this](https://portal.itsa.org.tw/user/register).
2. If you have more interest on C++,  please click [this](https://hackmd.io/@cheung4843/H1pi30DTr) to  see the C++ version.

:::
:::success
:pencil: **Start Programming:**
1. [e-tutor](https://e-tutor.itsa.org.tw/e-Tutor/)
2. [repl.it](https://replit.com/languages/python3)
:::
> [TOC]
---
## [C_MM01-易] 計算梯型面積
```python=
while True:
    a, b, c = map(float, input().split())
    area = ((a + b) * c) / 2
    print("Trapezoid area:" + str(area))
```
## [C_MM02-易] 計算三角形面積
```python=
while True:
    a, b = map(float, input().split())
    area = (a * b) / 2
    print(area)
```
## [C_MM03-易] 兩數總和
```python=
while True:
    a, b = map(int, input().split())
    print(a + b)
```
## [C_MM04-易] 計算總和、乘積、差、商和餘數
```python=
while True:
    a, b = map(int, input().split())
    print('{}+{}={}'.format(a, b, a + b))
    print('{}*{}={}'.format(a, b, a * b))
    print('{}-{}={}'.format(a, b, a - b))
    print('{}/{}={}...{}'.format(a, b, a // b, a % b))
```
## [C_MM05-易] 計算正方形面積
```python=
from decimal import Decimal, ROUND_HALF_UP

while True:
    a = input()
    print((Decimal(a) ** Decimal(2)).quantize(Decimal('0.0'), rounding=ROUND_HALF_UP))
```
## [C_MM06-易] 英哩轉公里
```python=
while True:
    mi = int(input())
    km = mi * 1.6
    print('{0:.1f}'.format(km))
```
## [C_MM07-易] 計算平方值與立方值
```python=
while True:
    a = int(input())
    print(a, a**2, a**3)
```
## [C_MM08-易] 計算兩數和的平方值
```python=
while True:
    a, b = map(int, input().split())
    print((a + b) ** 2)
```
## [C_MM09-易] 計算 i 次方的值
```python=
while True:
    i = int(input())
    if i > 31:
        print('Value of more than 31')
    else:
        print(1 << i)
```
## [C_MM10-易] 攝氏溫度轉華式溫度
```python=
while True:
    c = float(input())
    f = c * 1.8 + 32
    print('{0:.1f}'.format(f))
```
## [C_MM11-易] 購票計算
```python=
while True:
    x = int(input())
    print('NT10={}'.format(x // 10))
    x %= 10
    print('NT5={}'.format(x // 5))
    x %= 5
    print('NT1={}'.format(x))
```
## [C_MM12-易] 相遇時間計算
```python=
from math import ceil

while True:
    d = int(input())
    t = d * 100 / (100 - 30 * 2.54)
    print(ceil(t))
```
## [C_MM13-易] 停車費計算
```python=
while True:
    h1, m1 = map(int, input().split())
    h2, m2 = map(int, input().split())
    s = 0
    t = 60 * (h2 - h1) + (m2 - m1)
    if t > 240:
        s += ((t - 240) // 30) * 60
        t = 240
    if t > 120:
        s += ((t - 120) // 30) * 40
        t = 120
    s += (t // 30) * 30
    print(s)
```
## [C_MM14-易] 計算時間的組合
```python=
while True:
    s = int(input())
    print('{} days'.format(s // 86400))
    print('{} hours'.format(s % 86400 // 3600))
    print('{} minutes'.format(s % 3600 // 60))
    print('{} seconds'.format(s % 60))
```
## [C_MM15-易] 判斷座標是否在正方形的範圍內
```python=
while True:
    x, y = map(int, input().split())
    if 0 <= x <= 100 and 0 <= y <= 100:
        print('inside')
    else:
        print('outside')
```
## [C_MM16-易] 判斷座標是否在圓形的範圍內
```python=
while True:
    x, y = map(int, input().split())
    if x ** 2 <= 10000 and y ** 2 <= 10000:
        print('inside')
    else:
        print('outside')
```
## [C_MM17-易] 求最大公因數
```python=
from math import gcd

while True:
    x, y = map(int, input().split())
    print(gcd(x, y))
```
## [C_MM18-易] 十進制轉二進制
```python=
byte = [1] * 8
while True:
    x = int(input())
    isPos = x > 0
    if not isPos:
        x = ~x
    for i in range(7, -1, -1):
        byte[i] = x % 2
        x //= 2
    if not isPos:
        for i in range(0, 8):
            byte[i] ^= 1
    for bit in byte:
        print(bit, end='')
    print()
```
## [C_MM19-易] 電話費計算
```python=
while True:
    m = int(input())
    s = m * 0.9
    if m >= 1500:
        s *= 0.79
    elif m > 800:
        s *= 0.9
    print('{0:.1f}'.format(s))
```
## [C_MM20-易] 十進位轉十六進位
```python=
while True:
    x = int(input())
    print(format(x, 'X'))
```
## [C_MM21-易] 算階乘
```python=
from math import factorial

while True:
    x = int(input())
    print(factorial(x))
```
## [C_MM24-易] 計算薪水
```python=
while True:
    h, p = map(int, input().split())
    if h <= 60:
        s = h * p
    elif 60 < h < 121:
        s = (60 * p) + (h - 60) * p * 1.33
    elif h >= 121:
        s = (60 * p * 2.33) + (h - 120) * p * 1.66
        print('{0:.1f}'.format(s))
```
## [C_MM25-易] 計算正整數被3整除之數值之總和
```python=
while True:
    N = int(input())
    s = 0
    for i in range(0, N + 1, 3):
        s += i
    print(s)
```
## [C_MM26-易] 輸出 1x1、2x2、...、NxN之結果
```python=
while True:
    N = int(input())
    for i in range(1, N + 1):
        print('{}*{}={}'.format(i, i, i * i))
```
## [C_MM27-易] 計算兩整數間所有整數的總和
```python=
while True:
    a, b = map(int, input().split())
    print(((a + b) * (abs(a - b) + 1)) // 2)
```
## [C_MM28-易] 計算1到N之間屬於5和7的倍數
```python=
while True:
    N = int(input())
    if N >= 35:
        print(35, end='')
        for i in range(70, N + 1, 35):
            print(' {}'.format(i), end='')
        print()
```
## [C_MM29-易] 最大質數問題
此處採用$Bruteforce$。
```python=
def is_prime(x):
    if x > 1:
        for j in range(2, int(x ** (1 / 2)) + 1):
            if x % j == 0:
                return False
        return True
    else:
        return False


while True:
    N = int(input())
    for i in range(N - 1, 2, -1):
        if is_prime(i):
            print(i)
            break
```
## [C_MM30-易] 質數判別
此處採用$Eratosthenes$，後台測資小於$2^{10}$，如果把表開到$2^{31}$，會TLE。
```python=
MAX = 2 ** 10
prime = [True] * MAX
for i in range(2, int(MAX ** 0.5) + 1):
    if prime[i]:
        for j in range(i * i, MAX, i):
            prime[j] = False

while True:
    N = int(input())
    if prime[N]:
        print('YES')
    else:
        print('NO')
```
## [C_MM31-易] 計算1~N內能被2跟3整除，但不能被12整除的整數總和
```python=
while True:
    N = int(input())
    print(sum([i for i in range(0, N + 1, 6) if i % 6 == 0 and i % 12 != 0]))
```
## [C_MM32-易] Armstrong數
```python=
while True:
    N = int(input())
    if (N // 100) ** 3 + (N % 100 // 10) ** 3 + (N % 10) ** 3 == N:
        print('Yes')
    else:
        print('No')
```
## 	[C_MM33-易] 找1~N的完美數
測資小於$2^{13}$，事實上，直接建好表會更快；這裡只是示範如何建表。
```python=
table = []
for i in range(6, 2 ** 13, 2):
    s = 0
    for j in range(1, i):
        if i % j == 0:
            s += j
    if s == i:
        table.append(i)

while True:
    N = int(input())
    print(' '.join([str(x) for x in table if x <= N]))
```
## [C_MM34-易] 因數問題
```python=
while True:
    N = int(input())
    ans = []
    for i in range(1, N + 1):
        if N % i == 0:
            ans.append(str(i))
    print(' '.join(ans))
```
## [C_MM35-易] 平、閏年判定
```python=
while True:
    N = int(input())
    if N % 400 == 0 or (N % 4 == 0 and N % 100 != 0):
        print('Bissextile Year')
    else:
        print('Common Year')
```
## 	[C_MM36-易] 季節判定
```python=
while True:
    N = int(input())
    if N in [3, 4, 5]:
        print('Spring')
    elif N in [6, 7, 8]:
        print('Summer')
    elif N in [9, 10, 11]:
        print('Autumn')
    elif N in [12, 1, 2]:
        print('Winter')
```
## [C_MM37-易] 判斷座標位於何處
```python=
while True:
    x, y = map(int, input().split())
    if x == 0 and y == 0:
        print('Origin')
    elif x != 0 and y == 0:
        print('x-axis')
    elif x == 0 and y != 0:
        print('y-axis')
    elif x > 0 and y > 0:
        print('1st Quadrant')
    elif x < 0 < y:
        print('2nd Quadrant')
    elif x < 0 and y < 0:
        print('3rd Quadrant')
    elif x > 0 > y:
        print('4th Quadrant')
```
## [C_MM38-易] 判斷3整數是否能構成三角形之三邊長
```python=
while True:
    x, y, z = map(int, input().split())
    if x + y > z and x + z > y and y + z > x:
        print('fit')
    else:
        print('unfit')
```
## [C_MM39-易] 判斷是何種三角形
```python=
while True:
    a, b, c = map(int, input().split())
    a2, b2, c2 = a * a, b * b, c * c
    if a + b > c and a + c > b and b + c > a:
        if a2 + b2 == c2 or a2 + c2 == b2 or b2 + c2 == a2:
            print('Right Triangle')
        elif a2 + b2 < c2 or a2 + c2 < b2 or b2 + c2 < a2:
            print('Obtuse Triangle')
        elif a2 + b2 > c2 and a2 + c2 > b2 and b2 + c2 > a2:
            print('Acute Triangle')
    else:
        print('Not Triangle')
```
## [C_MM40-易] 1~N之間的總和
```python=
while True:
    N = int(input())
    s = 1
    print(1, end='')
    for i in range(2, N + 1):
        s += i
        print(' + {}'.format(i), end='')
    print(' = {}'.format(s))
```
## [C_MM42-中] 求(-1)^(n+1)x[1/(2n-1)]的和
```python=
s = [0] * 16
s[1] = 1.0
for i in range(2, 16):
    s[i] = s[i - 1] + ((-1) ** (i + 1)) / (2 * i - 1)

while True:
    n = int(input())
    print('{0:.3f}'.format(s[n]))
```
## 	[C_MM44-易] The Numbers
```python=
while True:
    N, M = input().split()
    cnt = 0
    for i in range(0, 6):
        if M[i] == N[0] and M[i + 1] == N[1]:
            cnt += 1
    print(cnt)
```
## [C_MM45-中] 分禮物
```python=
class Participant:
    def __init__(self, name, gift_name):
        self.name = name
        self.gift_name = gift_name


class Permutation:
    step = 0
    n = 0
    cnt = 0

    def __init__(self, n):
        self.n = n
        self.list_name = []
        self.arrangement = [''] * n
        self.book = [False] * n
        self.result = ''

    def dfs(self, step):
        if step == n:
            for k in range(n):
                if self.list_name[k].gift_name == self.arrangement[k]:
                    return

            for k in range(0, n):
                if k != 0:
                    self.result += ','
                self.result += '{} {}'.format(self.list_name[k].name, self.arrangement[k])
            self.result += '\n'
            self.cnt += 1

        for j in range(n):
            if self.book[j]:
                continue
            self.arrangement[step] = self.list_name[j].gift_name
            self.book[j] = True
            self.dfs(step + 1)
            self.book[j] = False

    def answer(self):
        print(self.cnt)
        print(self.result, end='')


n = int(input())
p = Permutation(n)

for i in range(0, n):
    name, gift_name = input().split()
    p.list_name.append(Participant(name, gift_name))
p.dfs(0)
p.answer()
```
## [C_MM46-易] 複數運算
```python=
n = int(input())
for i in range(0, n):
    opr, a, b, c, d = input().split()
    A = complex(int(a), int(b))
    B = complex(int(c), int(d))
    if opr == '+':
        C = A + B
    elif opr == '-':
        C = A - B
    elif opr == '*':
        C = A * B
    print(int(C.real), int(C.imag))
```
## [C_MM48-易] F91
```python=
def f91(z):
    if z >= 101:
        return z - 10
    else:
        return 91


k = int(input())
n = list(map(int, input().split()))
for x in n:
    print(f91(x))
```
## [C_MM49-易] 連續1的倍數
```python=
def f(x):
    num = '1'
    while int(num) % x != 0:
        num += '1'
    else:
        return len(num)


k = int(input())
n = list(map(int, input().split()))
for i in range(k):
    print(f(n[i]))
```
## [C_MM50-易] 分贓

```python=
while True:
    k = int(input())
    things = list(map(int, input().split()))
    total = sum(things)
    half = total // 2
    bag = [0] * (half + 1)
    for w in things:
        for j in range(half, w - 1, -1):
            bag[j] = max(bag[j - w] + w, bag[j])
    print(abs(total - 2 * bag[half]))
```


---
> [time=Sun, Jun 6, 2021 7:00 PM]
