python排列任意三个数的大小(python输入abc三个数找出最小的数

生活常识 2023-05-15 10:02生活常识www.xinxueguanw.cn

四位数能组成多少组数字 少儿Python每日一题(11)三位数组合的个数

原题解答

本次的题目如下所示(原题出处蓝桥杯)

【编程实现】用户输入一个正整数N(3lt=Nlt=9)。从0到N之间的所有正整数(包含0和N)中选择三个,组成一个三位数(0不能作为百位数),且这个三位数为奇数,请计算出共有多少种满足条件的三位数组合。(注意组成的每个三位数各个位上的数字不能重复)输入描述输入一个正整数N(3lt=Nlt=9)输出描述输出满足条件的三位数组合的个数【样例输入】3【样例输出】8【上述输入输出样例的进一步解释】用户输入的正整数,即样例输入为3,也就是将0、1、2、3四个数字进行组合。符合要求的三位数为103、123、203、213、201、231、301、321共8个,所以样例输出为8。

这道题也是一个非常经典的算法问题,解决这道题我们还是要使用枚举的方式。关键问题在于如何枚举。我们需要组成一个三位数,从100到321进行枚举吗?这样明显是不合理的,因为中途有大量的数字与题目要求不相符。那这道题更佳的解法是枚举各个数位上的数字。

题目中提出百位数不能是0,那百位数的范围是1到n;十位数没有任何限制,十位数的范围是0到n;个位数要求是奇数,范围是1到n之间的奇数。我们假设百位、十位、个位变量名为i、j、k,那我们可以得出它们的范围分别为

irange(1, n + 1)jrange(0, n + 1)krange(1, n + 1, 2)

题目中提出要求,各个数位上的数字不能重复,那在枚举的范围内判断百位、十位、个位两两不相等,则满足条件,通过这个思路,我们很容易得到程序的代码

n = int(input())count = 0for i in range(1, n + 1): for j in range(0, n + 1): for k in range(1, n + 1, 2): if i != j and i != k and j != k: count += 1print(count)

本题拓展

本题考查的是枚举算法和循环的嵌套,题目难度★★★

此道题其实改编自一道经典题目,原题如下所示

有 1 、 2 、 3 、 4 个数字,能组成多少个互不相同且无重复数字的三位数?它们分别是多少?

本道题的难度略小于原题,两道题的思路是如出一辙。我们同样是将百位、十位、个位的变量名定义为i、j、k,可以看出,它们的范围都是range(1, 5)。这道题除了要我们求出个数外,还要将这些数全部输出,满足条件的情况下,我们只要使用100 i + 10 j + k即可得到这个三位数。

代码如下

count = 0for i in range(1, 5): for j in range(1, 5): for k in range(1, 5): if i != j and i != k and j != k: print(100 i + 10 j + k) count += 1print(#39总数#39, count)

,在三个数位上的数字都相同的情况下,我们可以优化一下代码。毕竟这样循环的话,不同数位上的数字相同也参与了循环,增加了循环次数。如果百位上已经选取的数排除掉,十位上则少循环1个数字,十位上选取的数字再排除掉,各位上则少循环2个数字,我们看看如何在进入循环之前将已选中的数字排除掉。

r = list(range(1, 5))count = 0for i in r: t = r[:] # 复制一个列表出来 t.remove(i) # 进入下一级循环前删除已选中的百位数 for j in t: u = t[:] u.remove(j) # 进入下一级循环前删除已选中的十位数 for k in u: print(100 i + 10 j + k) count += 1print(#39总数#39, count)

python输入abc三个数找出最小的数 python试题比较两个数的大小

Copyright@2015-2025 www.xinxueguanw.cn 心血管健康网版板所有