题目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('输入企业的利润值(万元):'))defget_bonus(profit):
bonus=0if 0 <= profit <= 10:
bonus= 0.1*profitelif (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("利润输入值不能为负")returnbonusif __name__ == '__main__':print('提成为:',get_bonus(profit),'万元')#递归,运用了递归链条和递归基例
题目3:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?
分析:
x+100=n^2
x+100+168=m^2
两式相减 得到m^2-n^2=168
deftest1():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]+=1month_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 冒泡法(相邻位整数的比较)
defget_nums():
nums=[]
n=int(input("一共有几个整数?"))for i inrange(n):
x=int(input('请按次随机输入第{}个整数(剩余{}次输入):'.format(i+1,n-i)))
nums.append(x)returnnumsif __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))returnnumsif __name__=='__main__':print('经过冒泡法排序最终得到:{}'.format(BubbleSort(list_nums)))
方法2 选择排序法
defget_nums():
nums=[]
n=int(input("一共有几个整数?"))for i inrange(n):
x=int(input('请按次随机输入第{}个整数(剩余{}次输入):'.format(i+1,n-i)))
nums.append(x)returnnumsif __name__=='__main__':
myList=get_nums()defselectedSort(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]
tmp=myList[j]
myList[j]=myList[smallest]
myList[smallest]=tmp#打印每一轮比较好的列表
print("Round",i,":",myList) #根据第一个i循环进行打印,而不是选j循环
print("选择排序法:迭代过程")
selectedSort(myList)
方法3 二分排序法(最简单的)
defmerge_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)ifLIST:
start.append(LIST[0])
end.reverse()return (start +end)if __name__=='__main__':
nums=[]
n=int(input('一共几位数:'))for i inrange(n):
x=int(input("请依次输入整数:"))
nums.append(x)print(merge_sort(nums))