题目:有四个数字:1、2、3、4,能组成多少个互不相同且无重复数字的三位数?各是多少?

来看第一种解法

 num = [1, 2, 3, 4]
"""
根据题中'互不相同'要求,创建一个集合(去重),存放三位数
注意{}仅用于创建空字典!set()函数用来创建集合
"""
s = set()
# 遍历整个列表三次,组成三位数
for i in num:
for j in num:
# 去掉与i重复的数字
if j !=i:
for k in num:
# 去掉与i,j重复的数字
if k != j and k != i:
n = 100*i + 10*j + k
# 注意集合添加元素的方法为add和update
s.add(n)
print("无重复的三位数个数:", len(s))
print("分别是:", s)

这种解法时间复杂度为O(n2), 其中的列表可以换成range生成器

 s = set()
# 遍历整个列表三次,组成三位数
for i in range(1, 5):
for j in range(1, 5):
# 去掉与i重复的数字
if j !=i:
for k in range(1, 5):
# 去掉与i,j重复的数字
if k != j and k != i:
n = 100*i + 10*j + k
# 注意集合添加元素的方法为add和update
s.add(n)
print("无重复的三位数个数:", len(s))
print("分别是:", s)

以上两种解法都可以改成列表推导式的形式,如下,这种形式看上去简洁,但如果出错了排查起来比较困难,一般不推荐使用

lst = [100*i + 10*j + k for i in num for j in num for k in num if (i != j and j != k and k != i)]

第三种方法比较野路子,先确定最终数的范围,然后一个一个判断,当然这种效率是极低的

 s = set()
# 缩小范围,三位数肯定在123和433之间
for i in range(123, 433):
# 个位数字
a = i%10
# 十位数字
b = (i%100)//10
# 各位数字
c = (i%1000)//100
if a != b and b != c and a != c and 0 < a < 5 and 0 < b < 5 and 0 < c < 5:
s.add(i)
print("无重复的三位数个数:", len(s))
print("分别是:", s)

第四种方法是运用python的内置函数permutations,其语法格式为:

permutations(iterable[, r]),返回一个长度为r的元组

代码如下:

from itertools import permutations
# permutations返回3位长度的元组,permutations意为交换
s = set()
for i in permutations([1, 2, 3, 4], 3):
k = ''
for j in range(0, len(i)):
k = k + str(i[j])
s.add(int(k))
print("无重复的三位数个数:", len(s))
print("分别是:", s)

总结

第一、二种方法比较接近,都是for循环嵌套加判断求解,第三种方法比较另类,先判断一个大致范围再遍历,第四种方法运用python内置的permutations函数直接生成包含3个数字的元组。综合来看,第四种方法更简洁

 

python练习实例1--------给定数字组成三位数的更多相关文章

  1. 【python】题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?

    # encoding:utf-8 # p001_1234threeNums.py def threeNums(): '''题目:有1.2.3.4个数字,能组成多少个互不相同且无重复数字的三位数?都是多 ...

  2. java——有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?

    package java_day10; /* * 有1.2.3.4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? */ public class Demo04 { public stat ...

  3. C语言实例-能组成多少个三位数?

    题目:有1.2.3.4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? 程序分析:可填在百位.十位.个位的数字都是1.2.3.4.组成所有的排列后再去 掉不满足条件的排列. 源代码: #i ...

  4. js中:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?

    <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...

  5. python3 题目 有四个数字:1、2、3、4,能组成多少个互不相同且无重复数字的三位数?各是多少?

    方法一:for循环遍历 counter=0 for i in range(1,5): for j in range(1,5): for k in range(1,5): if i !=j and j ...

  6. 【Python】【demo实验5】【练习实例】【多个数字组合成不重复三位数】

    题目:有四个数字:1.2.3.4,能组成多少个互不相同且无重复数字的三位数?各是多少? 程序分析:可填在百位.十位.个位的数字都是1.2.3.4.组成所有的排列后再去 掉不满足条件的排列. 程序源代码 ...

  7. 快速入门:Python简单实例100个(入门完整版)

    Python3 100例 文章目录 Python3 100例 实例001:数字组合 实例002:“个税计算” 实例003:完全平方数 实例004:这天第几天 实例005:三数排序 实例006:斐波那契 ...

  8. Python 练习实例1

    Python 练习实例1 题目:有四个数字:1.2.3.4,能组成多少个互不相https://www.xuanhe.net/同且无重复数字的三位数?各是多少? 程序分析:可填在百位.十位.个位的数字都 ...

  9. 通过游戏学python 3.6 第一季 第一章 实例项目 猜数字游戏--核心代码 可复制直接使用 娱乐 可封装 函数

    本文实例讲述了python实现的简单猜数字游戏.分享给大家供大家参考.具体如下: 给定一个1-99之间的数,让用户猜数字,当用户猜错时会提示用户猜的数字是过大还是过小,知道用户猜对数字为止,猜对数字用 ...

随机推荐

  1. Java 类设计技巧

    摘自<Java核心技术>卷I:基础知识 p140 第4章对象与类 - 类设计技巧 1)一定将数据设计为私有. 最重要的是:绝对不要破坏封装性.有时候,需要编写一个访问器方法或更改器方法,但 ...

  2. luogu3242 接水果 (整体二分+树状数组)

    考虑整体二分,问题就变成了每个(水果)路径有多少个满足条件(权值)的(盘子)子路径 考虑一个盘子(a,b)表示两端点(不妨设dfn[a]<dfn[b]),那么他能接到的水果(u,v)一定满足(不 ...

  3. hdu3038How Many Answers Are Wrong(带权并查集)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3038 题解转载自:https://www.cnblogs.com/liyinggang/p/53270 ...

  4. Arch Linux中安装Anaconda

    安装步骤 通过AUR安装yaourt -S anaconda 激活Anaconda环境source /opt/anaconda/bin/activate root 关闭Anaconda环境source ...

  5. ubuntu 百度云

    下载链接:https://pan.baidu.com/s/1HBu5T3PZ8JsS93PgOKnUYw提取密码:6J1A 在终端中输入命令: sudo dpkg -i bcloud_3..1_all ...

  6. C# 下载文件 只利用文件的存放路径来下载

    第一种方式: 最简单的就是返回一个file类型的数据即FilePathResult类型的对象 string serverPath = ConfigurationManager.AppSettings[ ...

  7. MySQL的主从分离基本配置

    1.介绍 MySQL数据库设置读写分离,可以使对数据库的写操作和读操作在不同服务器上执行,提高并发量和响应速度.现在的网站一般大点的,都采用有数据库主从分离.读写分离,既起到备份作用也可以减轻数据库的 ...

  8. (BFS 二叉树) leetcode 515. Find Largest Value in Each Tree Row

    You need to find the largest value in each row of a binary tree. Example: Input: 1 / \ 3 2 / \ \ 5 3 ...

  9. (最小生成树 并查集)P1111 修复公路 洛谷

    题目背景 A地区在地震过后,连接所有村庄的公路都造成了损坏而无法通车.政府派人修复这些公路. 题目描述 给出A地区的村庄数N,和公路数M,公路是双向的.并告诉你每条公路的连着哪两个村庄,并告诉你什么时 ...

  10. python字节(bytes)

    在 3.x 中,字符串和二进制数据完全区分开.文本总是 Unicode,由 str 类型表示,二进制数据则由 bytes 类型表示.Python 3 不会以任意隐式的方式混用 str 和 bytes, ...