step1:题目:有四个数字:1、2、3、4,能组成多少个互不相同且无重复数字的三位数?各是多少?
- 分析: 可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去 掉不满足条件的排列
for i in range(1,5):
for j in range(1,5):
for k in range(1,5):
if (i!=j) and (i!=k) and (k!=j):
print(i,j,k)
输出:
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
step2:企业发放的奖金根据利润提成。利润(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,求应发放奖金总数?
- 分析:利用数轴来分界,定位,进行分段计算
i = int(input('净利润:'))
arr = [1000000,600000,400000,200000,100000,0]
rat = [0.01,0.015,0.03,0.05,0.075,0.1]
r = 0
for idx in range(1,6):
if i>arr[idx]:
r+=(i-arr[idx])*rat[idx]
print("%s ~ %s的部分的奖金:%d" %((i-arr[idx]),arr[idx],(i-arr[idx])*rat[idx]))
i=arr[idx]
print("总共应发奖金为:",r)
输出:
净利润:2000000
1400000 ~ 600000的部分的奖金:21000
200000 ~ 400000的部分的奖金:6000
200000 ~ 200000的部分的奖金:10000
100000 ~ 100000的部分的奖金:7500
100000 ~ 0的部分的奖金:10000
总共应发奖金为: 54500.0
step3:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?
- 分析:
假设该数为 x。
1、则:x + 100 = n2, x + 100 + 168 = m2
2、计算等式:m2 - n2 = (m + n)(m - n) = 168
3、设置: m + n = i,m - n = j,i * j =168,i 和 j 至少一个是偶数
4、可得: m = (i + j) / 2, n = (i - j) / 2,i 和 j 要么都是偶数,要么都是奇数。
5、从 3 和 4 推导可知道,i 与 j 均是大于等于 2 的偶数。
6、由于 i * j = 168, j>=2,则 1 < i < 168 / 2 + 1。
7、接下来将 i 的所有数字循环计算即可。
for i in range(1,85):
if 168 % i ==0:
j=168/i;
if i>j and (i+j)%2 ==0 and (i-j)%2 ==0:
m = (i+j)/2
n=(i-j)/2
x=n*n -100
print(x)
输出结果:
-99.0
21.0
261.0
1581.0
step4:输入某年某月某日,判断这一天是这一年的第几天?
- 分析:先按照平年来算,然后最后判断是不是平年,如果是平年就不用加1天,如果是闰年而且月份数超过了2的话就需要额外加1天。
year = int(input('please inout the year:\n'))
month = int(input('please input the month:\n'))
day = int(input('please input the date:\n'))
months = (0,31,59,90,120,151,181,212,243,273,304,334)
if 0<month <=12:
sum = months[month-1]
else:
print('date error')
sum+=day
leap = 0
if year%400==0 or ((year%100!=0) and (year%4==0)):
leap = 1
if leap ==1 and month>2:
sum+=1
print('it is the %dth day' % sum)
输出:
please inout the year:
2005
please input the month:
5
please input the date:
12
it is the 132th day
step5:输入三个整数x,y,z,请把这三个数由小到大输出。
- 分析:直接借助python的列表来做排序,然后输出
x = int(input('please input the first number:\n'))
y = int(input('please input the second number:\n'))
z = int(input('please input the thrid number:\n'))
l=[]
l.append(x)
l.append(y)
l.append(z)
l.sort()
print(l)
输出:
please input the first number:
1
please input the second number:
6
please input the thrid number:
3
[1, 3, 6]
step6:斐波那契数列(Fibonacci sequence),又称黄金分割数列,指的是这样一个数列:0、1、1、2、3、5、8、13、21、34、……。
分析:在数学上,费波那契数列是以递归的方法来定义:
F0 = 0 (n=0)
F1 = 1 (n=1)
Fn = F[n-1]+ Fn-2
def fib(n):
l = [0,1,2]
if n>3:
for i in range(3,n):
l.append((l[i-2]+l[i-1]))
print(l)
fib(10)
输出:
[0, 1, 2, 3, 5, 8, 13, 21, 34, 55]
step 7: 列表复制实现
l=[2,3,4,5]
b=l[:]#这里使用的是列表的截取,截取所有
print(b)
输出:
[2, 3, 4, 5]
step 8: 输出 9*9 乘法口诀表。
for i in range(1,10):
print("\n")
for j in range(1,i+1):
print("%d*%d=%d "%(i,j,i*j),end='')
输出:
1*1=1
2*1=2 2*2=4
3*1=3 3*2=6 3*3=9
4*1=4 4*2=8 4*3=12 4*4=16
5*1=5 5*2=10 5*3=15 5*4=20 5*5=25
6*1=6 6*2=12 6*3=18 6*4=24 6*5=30 6*6=36
7*1=7 7*2=14 7*3=21 7*4=28 7*5=35 7*6=42 7*7=49
8*1=8 8*2=16 8*3=24 8*4=32 8*5=40 8*6=48 8*7=56 8*8=64
9*1=9 9*2=18 9*3=27 9*4=36 9*5=45 9*6=54 9*7=63 9*8=72 9*9=81
step 9: 暂停一秒输出。使用timer的sleep()
import time
myD = {'name':'ggr','age':24}
for key,value in dict.items(myD):
print(key,value)
time.sleep(1)
step10:格式化输出当前时间
import time,datetime
time.sleep(1)
TIME = datetime.datetime.now()
print(TIME.strftime("%Y-%m-%d %H:%M:%S"))
输出:
2018-06-03 16:26:02
step11:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?
分析:兔子的规律为数列1,1,2,3,5,8,13,21....
这是一个典型的斐波那契数列
代码如上 step 6
step12:判断101-200之间有多少个素数,并输出所有素数。
分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除,则表明此数不是素数,反之是素数。
from math import sqrt
leap=1
count = 0
for i in range(101,201):
leap=1
key = int(sqrt(i+1))
for j in range(2,key+1):
if(i%j==0):
leap = 0
break
if leap == 1:
count+=1
print(i,end=', ')
print('\n总共有%d个质数'% count)
输出:
101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157, 163, 167, 173, 179, 181, 191, 193, 197, 199,
总共有21个质数
--- step 13: 打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个"水仙花数",因为153=1的三次方+5的三次方+3的三次方。
- 分析:利用for循环控制100-999个数,每个数分解出个位,十位,百位。
for i in range(100,1000):
b = i//100
s = (i//10)%10
g = i%10
if i == pow(b,3)+pow(s,3)+pow(g,3):
print(i,end=' ')
输出:
153 370 371 407
网友评论