题目1:有四个数字:1、2、3、4,能组成多少个互不相同且无重复数字的三位数?各是多少?
程序分析:可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去 掉不满足条件的排列。
#程序源代码 #!/usr/bin/python # -*- coding: UTF-8 -*- for i in range(1,5): for j in range(1,5): for k in range(1,5): if( i != k ) and (i != j) and (j != k): print i,j,k
题目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,求应发放奖金总数?
程序分析:请利用数轴来分界,定位。注意定义时需把奖金定义成长整型。
profit = int(input('输入发放的利润值(万元): ')) if 0 <= profit <10: print('提成为:',profit*0.1,'万元') if 10 <= profit < 20: print('提成为:',(profit-10)*0.075+10*0.1,'万元') if 20 <= profit < 40: print('提成为:',(profit-20)*0.05+10*0.075+10*0.1,'万元') if 40 <= profit < 60: print('提成为:',(profit-40)*0.03+20*0.05+10*0.075+10*0.1,'万元') if 60 <= profit < 100: print('提成为:',(profit-60)*0.015+20*0.03+20*0.05+10*0.075+10*0.1,'万元') if profit >= 100: print('提成为:',(profit-100)*0.01+40*0.015+20*0.03+20*0.05+10*0.075+10*0.1,'万元') #重复的部分较多,显得比较蠢,于是寻求改进的部分
方法2
profit = int(input('输入企业的利润值(万元): ')) def get_bonus(profit): bonus = 0 if 0 <= profit <= 10: bonus = 0.1*profit elif (profit > 10) and (profit <= 20): bonus = (profit-10)*0.075 + get_bonus(10) elif (profit > 20) and (profit <= 40): bonus = (profit-20)*0.05 + get_bonus(20) elif (profit > 40) and (profit <= 60): bonus = (profit-40)*0.03 + get_bonus(40) elif (profit > 60) and (profit <= 100): bonus = (profit-60)*0.015 + get_bonus(60) elif (profit >100): bonus = (profit-100)*0.01 + get_bonus(100) else: print("利润输入值不能为负") return bonus if __name__ == '__main__': print('提成为:',get_bonus(profit),'万元') #递归,运用了递归链条和递归基例
题目3:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?
分析:
x+100=n^2
x+100+168=m^2
两式相减 得到m^2-n^2=168
def test1(): for n in range(0,168): for m in range(n,169): if (m+n)*(m-n) == 168: print("这个整数是: ",str(n*n-100)) if __name__ =='__main__': test1()
题目4:输入某年某月某日,判断这一天是这一年的第几天?
分析: 依次输入年月日
1.闰年差异需根据输入判断
2.输入月份对应建立 字典{月份:天数}
3.输入天数+月份对应累计天数 即为所得
try: year=input("输入年份:") month=input("输入月份: ") day=input("输入日期号: ") finally: print("正在计算") months2days=[0,31,59,90,120,151,181,212,243,273,304,334] # 闰年 if int(year) % 4 ==0: for i in range(2,12,1): months2days[i] +=1 month_index=[] for j in range(12): month_index.append(i+1) dict_md=dict(zip(month_index,months2days)) whichday=dict_md[int(month)]+int(day) print('结果是: 第{}天'.format(whichday))
题目5:输入n个整数,请把这n个数由小到大输出。
方法1 冒泡法(相邻位整数的比较)
def get_nums(): nums=[] n=int(input("一共有几个整数?")) for i in range(n): x=int(input('请按次随机输入第{}个整数(剩余{}次输入):'.format(i+1,n-i))) nums.append(x) return nums if __name__=='__main__': list_nums=get_nums() def BubbleSort(nums): #冒泡法 print('初始整数集合为:{}'.format(nums)) for i in range(len(nums)-1): for j in range(len(nums)-i-1): if nums[j]>nums[j+1]: nums[j],nums[j+1]=nums[j+1],nums[j] #调换位置,相互赋值 print("第{}次迭代排序结果:{}".format((len(nums)-j-1),nums)) return nums if __name__=='__main__': print('经过冒泡法排序最终得到:{}'.format(BubbleSort(list_nums)))
方法2 选择排序法
def get_nums(): nums=[] n=int(input("一共有几个整数?")) for i in range(n): x=int(input('请按次随机输入第{}个整数(剩余{}次输入):'.format(i+1,n-i))) nums.append(x) return nums if __name__=='__main__': myList=get_nums() def selectedSort(myList): #获取list的长度 length = len(myList) #一共进行多少轮比较 for i in range(0,length-1): #默认设置最小值得index为当前值 smallest = i #用当先最小index的值分别与后面的值进行比较,以便获取最小index for j in range(i+1,length): #如果找到比当前值小的index,则进行两值交换 if myList[j]<myList[smallest]: tmp = myList[j] myList[j] = myList[smallest] myList[smallest]=tmp #打印每一轮比较好的列表 print("Round ",i,": ",myList) #根据第一个i循环进行打印,而不是选j循环 print("选择排序法:迭代过程 ") selectedSort(myList)
方法3 二分排序法(最简单的)
def merge_sort(LIST): start = [] end = [] while len(LIST) > 1: a = min(LIST) b = max(LIST) start.append(a) end.append(b) LIST.remove(a) LIST.remove(b) if LIST: start.append(LIST[0]) end.reverse() return (start + end) if __name__=='__main__': nums=[] n=int(input('一共几位数: ')) for i in range(n): x=int(input("请依次输入整数:")) nums.append(x) print(merge_sort(nums))