###### 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) ``` >**思路** >![](https://i.imgur.com/cZNDeCI.png) >![](https://i.imgur.com/YoFP7gM.png) ## 第三題 ### 題目 :::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)) ``` > **思路:** ![](https://i.imgur.com/7kyPhwf.png) >![](https://i.imgur.com/xMngezA.png) ## 第五題 ### 題目 :::warning **問題:** 西洋棋中,皇后可以水平、垂直或對角移動到任意數量的位置。 給定一個皇后的位置座標,在8x8的西洋棋棋盤中,請算出有多少的位置是可被皇后吃掉的(不包含皇后的位置)。 **輸入:** 以空白相隔的兩個整數,代表皇后的位置的x與y座標。 **輸出:** 有多少的位置是可被該皇后吃掉的(不包含皇后的位置)。 ![](https://i.imgur.com/JUpbV5U.png) | 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加總即可 > ![](https://i.imgur.com/qhAKKab.png) #### 優化版 ```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() ``` > **思路** ![](https://i.imgur.com/qtG7gWC.png) #### 函式解 ```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/) ![](https://i.imgur.com/LfRr67b.png) >最後一步做完列要在反轉 ```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)) ```