题目:给定一组数字, 一组有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天