教学案例:求最大数

求最大数

【任务描述】输入一个三位数,将该三位数各位上的数字重新排列得到新的三位数,求这些三位数中最大的三位数和最小的三位数。如输入123,输出最大数321,最小数123

【解决思路】

将三位数的各位上的数字取出,然后求出这3个数字中的最大值,中间值和最小值,然后确定新的三位数的百位数,十位数,个位数,最后计算出最大的三位数和最小的三位数。下面的代码中假设变量baiwei,shiwei,gewei存放的数量依次递减,那么最大数就可以用公式计算maxnum=100*baiwei+10*shiwei+gewei。在实际编程中,经常会用到这样的方法。(常规思路)

【代码】

【方法1】

num=int(input(“请输入一个三位数“))

gewei=num % 10

shiwei=num // 10 % 10

baiwei=num // 100

if baiwei<shiwei:

    baiwei,shiwei=shiwei,baiwei

if baiwei<gewei:

    baiwei,gewei=gewei,baiwei

if shiwei<gewei:

    shiwei,gewei=gewei,shiwei

maxnum=100*baiwei+10*shiwei+gewei

minnum=100*gewei+10*shiwei+baiwei

print(“最大的三位数:“,maxnum)

print(“最小的三位数:“,minnum)

【方法2】,利用Python内置对象listsort方法,可以对各位上的数字排序,然后可以求出最大值和最小值。

s=input(“请输入一个三位数“)

num=[item for item in s] #列表生成式,将各位上的数字存入列表num

num.sort()            #对列表升序排序

minnum=int(num[0])*100+int(num[1])*10+int(num[2])

maxnum=int(num[2])*100+int(num[1])*10+int(num[0])

print(“最大的三位数:“,maxnum)

print(“最小的三位数:“,minnum)

【扩展】如果输入的整数位数不确定的话,就不能用上述程序实现。即输入一个正整数n,输出该数各位上的数字重新组合后的最大数和最小数。

【思路】逐位取出各位上的数字,并存入list(类似vb中的数组),然后同样利用sort方法快速对各位上的数字排序,利用各位上权值生成最大数和最小数。

s=int(input(“请输入一个正整数“))

num=[]

while(s>0):  #取出各位上的数字存入列表num

    num.append(s%10)

    s=s // 10

num.sort()  #对num升序排序

maxnum=minnum=0

for item in num:   #生成最小数

    minnum=minnum*10+int(item)

for item in num[::-1]:  #生成最大数

    maxnum=maxnum*10+int(item)

print(“最大的三位数:“,maxnum)

print(“最小的三位数:“,minnum)

说明:num[::-1]实现对列表num逆序

【运行结果】

请输入一个三位数123

最大的三位数: 321

最小的三位数: 123