本週有所收穫的題目:
第一題:
第4章-17 水仙花數(20 分) (20 分) 水仙花數是指一個N位正整數(N≥3),它的每個位上的數字的N次冪之和等於它本身。
例如:153=1×1×1+5×5×5+3×3×3。本題要求編寫程式,計算所有N位水仙花數。
輸入格式: 輸入在一行中給出一個正整數N(3≤N≤5)
輸出格式: 按遞增順序輸出所有N位水仙花數,每個數字佔一行。
我的程式碼:
n = int(input())
print(10 ** n)
for i in range(10 ** (n-1), 10 ** n):
hold = i
s = 0
for x in range(n):
s += int((hold % 10) ** n)
hold = int(hold / 10)
if hold < 1:
break
if s == i:
print(i)
別人的程式碼:
import math
n=int(input())
for i in range(int(math.pow(10,n-1)),int(math.pow(10,n))):
sum = 0
j=i
while(j>=1):
sum=sum+math.pow(j%10,n)
j=j//10
if(sum==i):
print('{:d}'.format(i))
學到了:
1.強制轉換為int:
j=j//10
兩個‘/’可以使除後的數成為整數。
我一開始只用了一個斜槓,一直無法得出正確結果,因為算出來的數帶有小數。
第二題
第4章-19 矩陣運算 (20 分)
給定一個n×n的方陣,本題要求計算該矩陣除副對角線、最後一列和最後一行以外的所有元素之和。副對角線為從矩陣的右上角至左下角的連線。輸入格式: 輸入第一行給出正整數n(1<n≤10);隨後n行,每行給出n個整數,其間以空格分隔。
輸出格式: 在一行中給出該矩陣除副對角線、最後一列和最後一行以外的所有元素之和。
我的程式碼:
ls = []
n = int(input())
y = n - 1
s = 0
for i in range(n):
ls.append(input().split())
for x in range(n):
for y in range(n):
ls[x][y] = int(ls[x][y])
j = n - 1
for x in range(n - 1):
for y in range(n - 1):
if y != j:
s += ls[x][y]
j -= 1
print(s)
別人的程式碼:
N = int(input())
t = []
for i in range(N):
t.append(list(map(int,input().split())))
res = 0
for i in range(N-1):
for j in range(N-1):
if i+j!=N-1:
res += t[i][j]
print(res)
我學到了:
對於矩陣形式的資料輸入,可以先創一個空列表,然後通過
t.append(list(map(int,input().split())))
將資料輸入儲存為二維陣列的形式
本週刷題情況:
這周因為事情有點多以及自己的懶惰,只寫了五道題,我要好好反省自己5555