###### tags: `Python`
# 期中考訂正
## 第一題
### 題目
:::info
**問題:**
給定一個正實數(可能會有小數點),請印出該數小數點前一位數字與小數點後一位數字的和。該數若無小數點,小數點後的一位數字為0。
| Input | Result |
|:---------:|:------:|
| 12.34 | 5 |
| 312.19999 | 3 |
:::
#### 解
```python=
a=float(input())
print((int(a)%10)+int(a*10)%10)
```
## 第二題
### 題目
:::info
**問題:**
原有一組數字 1 ~ N 的卡片。現在有一張卡片遺失,並又有一張卡片重複。
給定N張卡片的數字,請輸出遺失的那張卡片號碼,與重複的那張卡片號碼。
**輸入:**
以空白間隔的N 個正整數,代表N張卡片的數字
**輸出:**
兩個正整數,代表遺失的那張卡片號碼,與重複的那張卡片號碼。
| Input | Result |
|:--------- |:------ |
| 1 2 4 4 | 3 4 |
| 5 1 2 3 5 | 4 5 |
:::
#### 解
```python=
A=[int(i) for i in input().split()]
B=[int(i) for i in range(1,len(A)+1)]
for i in range(len(A)):
for j in range(i+1,len(A),1):
if A[i]==A[j]:
tmp=A[i]
for i in A:
if i in B:
B.remove(i)
print(B[0],tmp)
```
> **思路:** 先挑出重複的,再來用B找出消失的(用remove)
#### 家銓好電我要學起來
```python=
A=[int(i) for i in input().split()]
B=[ 0 for i in range(len(A)) ]
for i in A:
B[ i-1 ]+=1
print(B.index(0)+1,B.index(2)+1)
```
>**思路**
>
>
## 第三題
### 題目
:::info
**問題:**
給定一個正整數的數列,每個數字不相同,請將該列表的最大和第二大的元素交換,並印出結果。
| Input | Result |
| ----- | ------ |
| 1 2 3 4 | 1 2 4 3 |
| 1 3 | 3 1 |
:::
#### 解
```pyrhon=
A=[int(i) for i in input().split()]
B=sorted(A)
max_1=B[-1]
max_1_index=A.index(max_1)
max_2=B[-2]
max_2_index=A.index(max_2)
A[max_1_index],A[max_2_index]=A[max_2_index],A[max_1_index]
for i in A:
print(i,end=" ")
```
> **思路:** 找出最大的和最大得索引值,再來找出最小的和最小的索引值,將兩者交換即可
## 第四題
### 題目
:::warning
**問題:**
給定一個字串及正整數n。將字串切成n個等長的子字串。將每個子字串反轉後,再結合為一個字串,並印出此字串。
**輸入:**
第一行為一個字串,第二行為正整數n
**輸出:**
結合後的字串
| Input | Result |
|:-----------|:------|
| abcdef<br>3 | badcfe |
| Hello<br>1 | olleH |
| 123456<br>3 | 214365 |
:::
#### 解
```python=
a=input()
chip=int(input())
len_=int(len(a)/chip)
address=[]
for i in range(1,chip+1):
address.append(i*len_)
pre=0
for i in address:
print( a[ (i-1)-len(a) : pre-len(a)-1 : -1 ] , end="" )
pre=i
```
#### 家銓好電我要學起來
```python=
a=input()
l=int(input())
C=[]
for i in range(0,len(a),len(a)//l):
C.append(a[ i : i+(len(a)//l) ])
for i in range(l):
C[i]=C[i][len(a)//l::-1]
print("".join(C))
```
> **思路:** 
>
## 第五題
### 題目
:::warning
**問題:**
西洋棋中,皇后可以水平、垂直或對角移動到任意數量的位置。
給定一個皇后的位置座標,在8x8的西洋棋棋盤中,請算出有多少的位置是可被皇后吃掉的(不包含皇后的位置)。
**輸入:**
以空白相隔的兩個整數,代表皇后的位置的x與y座標。
**輸出:**
有多少的位置是可被該皇后吃掉的(不包含皇后的位置)。

| Input | Result |
|:-----:|:------:|
| 1 1 | 21 |
| 4 4 | 27 |
:::
#### 解
```python=
A=[ [0]*8 for i in range(8) ]
x,y=map(int,input().split())
x=x-1
y=y-1
for i in range(8):
for j in range(8):
if ( abs( x - i ) == abs( y - j ) ):
A[i][j]=1
elif (x == i):
A[i][j]=1
elif (y == j):
A[i][j]=1
A[x][y]=0
sum_=0
for i in range(8):
sum_+=sum(A[i])
print(sum_)
```
> **思路:** 模擬做法,將棋盤list化,會被吃則標記1,最後將list加總即可
> 
#### 優化版
```python=
x,y=map(int,input().split())
sum=0
for i in range(1,9):
for j in range(1,9):
if x!=i or y!=j:
if abs( x - i ) == abs( y - j ) or x == i or y == j:
sum+=1
print(sum)
```
## 第六題
### 題目
:::danger
**題目:**
給定兩個正整數 m 和 n,代表一個 m×n 矩陣 A,有 m 行 n 個元素。
接著m行有n個數字,代表矩陣m 行的n 個元素。
最後給定一個數字,代表「順時針翻轉」的次數。
請印出在多次「順時針翻轉」後的矩陣。
**當一個矩陣如下:**
1 2 3
4 5 6
**一次順時針翻轉的結果為:**
4 1
5 2
6 3
| Input | Result |
| ----------------------------- | ----------------- |
| 2 3<br>1 2 3<br>4 5 6<br>1 | 4 1<br>5 2<br>6 3 |
| 3 2<br>1 2<br>3 4<br>5 6<br>2 | 6 5<br>4 3<br>2 1 |
:::
#### 解
```python=
row,col=map(int,input().split())
A=[]
for i in range(row):
A.append([j for j in input().split()])
time=int(input())
if time%4==0:
for i in A:
print("".join(i))
elif time%4==1:
for j in range(col):
for i in range(row-1,-1,-1):
print( A[i][j] , end=" " )
print()
elif time%4==2:
for i in range(row-1,-1,-1):
for j in range(col-1,-1,-1):
print(A[i][j],end=" ")
print()
elif time%4==3:
for j in range(col-1,-1,-1):
for i in range(0,row,1):
print(A[i][j],end=" ")
print()
```
> **思路**

#### 函式解
```python=
def f(A,row,col):
C=[[0]*row for i in range(col)]
for i in range(row):
for j in range(col):
C[j][row-i-1]=A[i][j]
return C
row,col=map(int,input().split())
A=[]
for i in range(row):
A.append( [j for j in input().split()] )
time=int(input())
for i in range(time):
A=f(A,row,col)
row,col=col,row
for i in A:
print(" ".join(i))
```
>家銓好電
#### Zip()
> [詳細用法](https://haosquare.com/python-zip-function/)

>最後一步做完列要在反轉
```python=
x,y=map(int,input().split())
A=[[i for i in input().split()] for j in range(x)]
n=int( input() )
for i in range(n):
A=list(zip(*A[::-1]))
for i in A:
print(" ".join(i))
```