題目:給定一組數字, 一組有9個數字(1到9),將這9個數字填寫到3*3 的九宮格內;使得橫,豎,斜對角一條線上的三個數字之和相等;如果無解則打印無解
思路:設定一個循環,依次將9個數分別填充到九宮格當中,再設置條件比較
程序如下:
import numpy as np
input_list = [1,2,3,4,5,6,7,8,9]
t_array = np.array([[0 for i in range(3)] for j in range(3)])
print(t_array)
x,y = 0,1
t_array[0][1] = input_list[0]
k = 1
while k < 9:
x_new = x - 1
y_new = y + 1
if x_new < 0:
x_new = 2
if y_new > 2:
y_new = 0
if t_array[x_new][y_new] != 0: # 判斷是否填充完畢
x_new = x+1
y_new = y
t_array[x_new][y_new] = input_list[k]
x = x_new
y = y_new
k+=1
row1 = t_array[0][0] + t_array[0][1] + t_array[0][2]
row2 = t_array[1][0] + t_array[1][1] + t_array[1][2]
row3 = t_array[2][0] + t_array[2][1] + t_array[2][2]
col1 = t_array[0][0] + t_array[1][0] + t_array[2][0]
col2 = t_array[0][1] + t_array[1][1] + t_array[2][1]
col3 = t_array[0][2] + t_array[1][2] + t_array[2][2]
dig1 = t_array[0][0] + t_array[1][1] + t_array[2][2]
dig2 = t_array[2][0] + t_array[1][1] + t_array[0][2]
if row1 == row2 and row1 == row3 and row1 == col1 and row1 == col2 and row1 == col3 and row1 == dig1 and row1 == dig2:
print(t_array)
else:
print("無解!!!")
運行結果:
[[0 0 0]
[0 0 0]
[0 0 0]]
[[8 1 6]
[3 5 7]
[4 9 2]]
題目:1、2、3、4之間任意三個數的排列組合
思路:可以使用for循環或者itertools模塊中的permutation方法
for方法:
result = []
for i in range(1,5):
for j in range(1,5):
for k in range(1,5):
if len(set((i,j,k))) == 3:
result.append(list((i,j,k)))
print(result)
運行結果:
[[1, 2, 3], [1, 2, 4], [1, 3, 2], [1, 3, 4], [1, 4, 2], [1, 4, 3], [2, 1, 3], [2, 1, 4], [2, 3, 1], [2, 3, 4], [2, 4, 1], [2, 4, 3], [3, 1, 2], [3, 1, 4], [3, 2, 1], [3, 2, 4], [3, 4, 1], [3, 4, 2], [4, 1, 2], [4, 1, 3], [4, 2, 1], [4, 2, 3], [4, 3, 1], [4, 3, 2]]
permutation方法
result = []
from itertools import permutations
for i in permutations(range(1,5),3):
result.append(list(i))
print(result)
運行結果:
[[1, 2, 3], [1, 2, 4], [1, 3, 2], [1, 3, 4], [1, 4, 2], [1, 4, 3], [2, 1, 3], [2, 1, 4], [2, 3, 1], [2, 3, 4], [2, 4, 1], [2, 4, 3], [3, 1, 2], [3, 1, 4], [3, 2, 1], [3, 2, 4], [3, 4, 1], [3, 4, 2], [4, 1, 2], [4, 1, 3], [4, 2, 1], [4, 2, 3], [4, 3, 1], [4, 3, 2]]
題目:企業發放的獎金根據利潤提成。利潤(I)低於或等於10萬元時,獎金可提10%;利潤高於10萬元,低於20萬元時,低於10萬元的部分按10%提成,高於10萬元的部分,可可提成7.5%;20萬到40萬之間時,高於20萬元的部分,可提成5%;40萬到60萬之間時高於40萬元的部分,可提成3%;60萬到100萬之間時,高於60萬元的部分,可提成1.5%,高於100萬元時,超過100萬元的部分按1%提成,從鍵盤輸入當月利潤I,求應發放獎金總數?
思路:獎金包括高於指定範圍外的利潤提成以及在其範圍內各個範圍的利潤提成
程序如下:
def money(num):
bonus1 = 100000*0.1 #10萬範圍內的利潤提成
bonus2 = bonus1 + 100000*0.075 # 20萬範圍內的利潤提成
bonus3 = bonus2 + 200000* 0.05 # 40萬範圍內的利潤提成
bonus4 = bonus3 + 200000*0.03 # 60萬範圍內的利潤提成
bonus5 = bonus4 + 400000*0.015 # 100萬範圍內的利潤提成
if num <= 100000:
bonus = num * 0.1
elif 100000 < num <= 200000:
bonus = (num-100000)*0.075 + bonus1
elif 200000 < num <= 400000:
bouns = (num - 200000) * 0.05 + bonus2
elif 400000 < num <= 600000:
bonus = (num - 400000) * 0.03 + bonus3
elif 600000 < num <= 1000000:
bonus = (num - 600000) * 0.015 + bonus4
elif num > 1000000:
bonus = (num - 1000000) * 0.01 + bonus5
print(bonus)
num = input('請輸入利潤:')
money(int(num))
運行結果:
請輸入利潤:12000000
149500.0
題目:一個整數,它加上100後是一個完全平方數,再加上168又是一個完全平方數,請問該數是多少?
程序分析:循環計算即可,判斷成立即可輸出。首先要判斷是否爲正整數。引入math模塊算平方根。
i+100 = x**2 i+100+168=y**2
程序如下:
import math
for i in range(10000):
x = math.sqrt(i + 100)
if x - int(x) == 0: # 完全平方數爲正整數
n1 = int(x)
y = math.sqrt(i + 268)
if y - int(y) == 0: # 完全平方數爲正整數
n2 = int(y)
if n1**2 == i+100 and n2**2 == i+268:
print('該整數爲',i)
print('加100之後的完全平方數是',n1)
print('在加168之後的完全平方數是',n2)
運行結果:
該整數爲 21
加100之後的完全平方數是 11
在加168之後的完全平方數是 17
該整數爲 261
加100之後的完全平方數是 19
在加168之後的完全平方數是 23
該整數爲 1581
加100之後的完全平方數是 41
在加168之後的完全平方數是 43
題目:判斷101-200之間有多少個素數,並輸出所有素數。
程序分析:判斷素數的方法:用一個數分別去除2到sqrt(這個數),
如果能被整除, 則表明此數不是素數,反之是素數。
程序如下:
ret = []
for i in range(101,201):
for j in range(2,i): #如果除於除了1和本身的數餘數爲0,則這個數就不是素數(質數)
if i%j == 0:
break
else: # for... else結構
ret.append(i)
print(ret)
運行結果:
[101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157, 163, 167, 173, 179, 181, 191, 193, 197, 199]
題目:輸入某年某月某日,判斷這一天是這一年的第幾天?
方法一:使用datetime模塊
程序如下:
import datetime
y = int(input('請輸入年:'))
m = int(input('請輸入月:'))
r = int(input('請輸入日:'))
target_day = datetime.date(y,m,r) #將輸入的日期轉化爲標準的日期格式
y_day = target_day - datetime.date(target_day.year-1,12,31) #減去上一年最後一天就是該年的第幾天
print(f'{target_day}是{target_day.year}年的第{y_day.days}天')
運行結果:
請輸入年:1995
請輸入月:6
請輸入日:27
1995-06-27是1995年的第178天
方法二:使用time模塊
import time
def birthday(a,b,c):
t1 = time.mktime((a,b,c,0,0,0,0,0,0)) # 將時間元組轉化爲時間戳
t2 = time.localtime(t1) # 將時間戳轉化爲時間元組
t3 = time.strftime('%Y-%m-%d',t2) # 將時間元祖轉換爲標準時間
print('對應的時間戳爲',t1) #時間戳
print('對應的時間元祖爲',t2) #時間元祖
print('對應的時間標準格式爲',t3) #標準時間格式
print(f'{t3}是該年中的第{t2.tm_yday}天')
a = int(input('請輸入年:'))
b = int(input('請輸入月:'))
c = int(input('請輸入日:'))
birthday(a,b,c)
運行結果:
請輸入年:1995
請輸入月:6
請輸入日:27
對應的時間戳爲 804182400.0
對應的時間元祖爲 time.struct_time(tm_year=1995, tm_mon=6, tm_mday=27, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=1, tm_yday=178, tm_isdst=0)
對應的時間標準格式爲 1995-06-27
1995-06-27是該年中的第178天