# 111-1 基礎程式設計期中考 ## 只是小小分享 不是最好的 ## 第一題 ### 題目敘述 問題:給定一個正實數(可能會有小數點),請印出該數小數點前一位數字與小數點後一位數字的和。該數若無小數點,小數點後的一位數字為0。 ![](https://i.imgur.com/m4OuS9y.png) ### 範例解答 ```python= n=float(input()) n=n*10 a=int(n) x=a%10; n=int(n) n//=10 x+=n%10 print(x) ``` ```python= n=int(float(input())*10) print((n%100)//10+(n%10)) ``` ## 第二題 ### 題目敘述 問題: 原有一組數字 1 ~ N 的卡片。現在有一張卡片遺失,並又有一張卡片重複。 給定N張卡片的數字,請輸出遺失的那張卡片號碼,與重複的那張卡片號碼。 輸入: 以空白間隔的N 個正整數,代表N張卡片的數字 輸出:兩個正整數,代表遺失的那張卡片號碼,與重複的那張卡片號碼。 ![](https://i.imgur.com/VQkH23E.png) ### 範例解答 ```python= a=[int(i) for i in input().split(' ')] miss=0 de=0 b=[0]*len(a) for i in a: b[i-1]+=1 for i in range(len(b)): if b[i] == 0: miss=i+1 if b[i] == 2: de=i+1 print(miss,de) ``` ## 第三題 ### 題目敘述 問題:給定一個正整數的數列,每個數字不相同,請將該列表的最大和第二大的元素交換,並印出結果。 ![](https://i.imgur.com/eRrT4Mm.png) ### 範例解答 ```python= a=[int(i) for i in input().split()] if len(a)<2 : print(*a) else : ma=a[0] ma2=a[0] maid=0 ma2id=0 if a[0] > a[1] : ma2=a[1] ma=a[0] ma2id=1 maid=0 for i in range(1,len(a)): if a[i]>ma2 : if a[i] > ma : ma2=ma ma2id=maid ma=a[i] maid=i else : ma2=a[i] ma2id=i tmp=a[maid] a[maid]=a[ma2id] a[ma2id]=tmp print(" ".join(str(i) for i in a)) ``` ```python= #by 于桐 a = [i for i in input().split()] s = sorted(a) max1, max2 = a.index(s[-1]), a.index(s[-2]) a[max1], a[max2] = a[max2], a[max1] print(*a) a = [i for i in input().split()] ``` ## 第四題 ### 題目敘述 給定一個字串及正整數n。將字串切成n個等長的子字串。將每個子字串反轉後,再結合為一個字串,並印出此字串。 輸入:第一行為一個字串,第二行為正整數n 輸出:結合後的字串 ![](https://i.imgur.com/ymXmz9w.png) ### 範例解答 ```python= s=input() n=int(input()) a=[] for i in range(0,len(s),len(s)//n): a.append(s[i:i+len(s)//n]) for i in range(n): a[i]=a[i][len(a[i])-1::-1] print("".join(a)) ``` ### 宸僖解法 ```python= s = input() n = int(input()) for i in range(n): print(s[i*len(s)//n : i*len(s)//n+len(s)//n][::-1],end='') ``` ## 第五題 ### 題目敘述 西洋棋中,皇后可以水平、垂直或對角移動到任意數量的位置。 給定一個皇后的位置座標,在8x8的西洋棋棋盤中,請算出有多少的位置是可被皇后吃掉的(不包含皇后的位置)。 輸入:以空白相隔的兩個整數,代表皇后的位置的x與y座標。 輸出:有多少的位置是可被該皇后吃掉的(不包含皇后的位置)。 ![](https://i.imgur.com/i49zToe.png) ![](https://i.imgur.com/jToHKSU.png) ### 範例解答 ```python= a,b=input().split() a=int(a) b=int(b) sum=0 for i in range(1,9): for j in range(1,9): if abs(i-a)==abs(j-b) or i==a or j==b: sum+=1 print(sum-1) ``` #### 一行解 待補() ~~我知道有一行解,但是我懶得想~~ ```python= n = [int(s) for s in input().split()] print(14+min(8-n[0],8-n[1])+min(abs(1-n[0]),abs(1-n[1]))+min(8-n[0],abs(1-n[1]))+min(abs(1-n[0]),8-n[1])) ``` ## 第六題 ### 題目敘述 給定兩個正整數 m 和 n,代表一個 m×n 矩陣 A,有 m 行 n 個元素。 接著m行有n個數字,代表矩陣m 行的n 個元素。 最後給定一個數字,代表「順時針翻轉」的次數。 請印出在多次「順時針翻轉」後的矩陣。 當一個矩陣如下: 1 2 3 4 5 6 一次順時針翻轉的結果為: 4 1 5 2 6 3 ![](https://i.imgur.com/CUZ8b1n.png) ### 範例解答 ```python= m,n=[int(i) for i in input().split()] a=[[" " for i in range(n)] for j in range(m)] for i in range(m): a[i]=input().split() time=int(input()) time%=4 if time==0: for i in range(m): print(" ".join(a[i])) elif time==1: for i in range(n): for j in range(m-1,-1,-1): print(a[j][i],end=" ") print() elif time==2: for i in range(m-1,-1,-1): for j in range(n-1,-1,-1): print(a[i][j],end=" ") print() else : for i in range(n-1,-1,-1): for j in range(m): print(a[j][i],end=" ") print() ``` ```python= def f(a,m,n): tmp=[["" for i in range(m)]for j in range(n)] for i in range(m): for j in range(n): tmp[j][m-i-1]=a[i][j] return tmp m,n=[int(i) for i in input().split()] a=[] for i in range(m): a.append(input().split()) x=int(input())%4 for _ in range(x): a=f(a,m,n) m,n=n,m for i in range(m): print(" ".join(a[i])) ``` > [name=你好電] > Z1han好電好電好電好電好電好電