python练习实例1--------给定数字组成三位数
题目:有四个数字: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--------给定数字组成三位数的更多相关文章
- 【python】题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?
# encoding:utf-8 # p001_1234threeNums.py def threeNums(): '''题目:有1.2.3.4个数字,能组成多少个互不相同且无重复数字的三位数?都是多 ...
- java——有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?
package java_day10; /* * 有1.2.3.4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? */ public class Demo04 { public stat ...
- C语言实例-能组成多少个三位数?
题目:有1.2.3.4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? 程序分析:可填在百位.十位.个位的数字都是1.2.3.4.组成所有的排列后再去 掉不满足条件的排列. 源代码: #i ...
- js中:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...
- 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 ...
- 【Python】【demo实验5】【练习实例】【多个数字组合成不重复三位数】
题目:有四个数字:1.2.3.4,能组成多少个互不相同且无重复数字的三位数?各是多少? 程序分析:可填在百位.十位.个位的数字都是1.2.3.4.组成所有的排列后再去 掉不满足条件的排列. 程序源代码 ...
- 快速入门:Python简单实例100个(入门完整版)
Python3 100例 文章目录 Python3 100例 实例001:数字组合 实例002:“个税计算” 实例003:完全平方数 实例004:这天第几天 实例005:三数排序 实例006:斐波那契 ...
- Python 练习实例1
Python 练习实例1 题目:有四个数字:1.2.3.4,能组成多少个互不相https://www.xuanhe.net/同且无重复数字的三位数?各是多少? 程序分析:可填在百位.十位.个位的数字都 ...
- 通过游戏学python 3.6 第一季 第一章 实例项目 猜数字游戏--核心代码 可复制直接使用 娱乐 可封装 函数
本文实例讲述了python实现的简单猜数字游戏.分享给大家供大家参考.具体如下: 给定一个1-99之间的数,让用户猜数字,当用户猜错时会提示用户猜的数字是过大还是过小,知道用户猜对数字为止,猜对数字用 ...
随机推荐
- Write less code
If you find yourself writing a lot of code to do something simple, you're probably doing it wrong. A ...
- POJ-3687 Labeling Balls(拓扑)
不一样的拓扑排序 给定一些标记为1到n的数, 求出满足a < b 的序列, 如果有多个输出, 按先标签1往前的位置, 然后按标签2往前的位置, 对于每个标签, 位置都尽量往前. 因为位置要往前, ...
- centos7安装较高版本python3.5/3.6
应用环境: Centos7或者RHEL7下默认安装的python版本为2.7.x,更新不够及时,现在很多时候需要额外安装较高版本的python环境, 网上搜罗一圈总结记录一下常用两种方式: ① 源码编 ...
- Rocket.Chat 开源IM系统部署
Rocket.Chat 官方给出的文档也个人觉得太麻烦了,并且对ubuntu的支持程度远高于CentOS,自己就折腾写了个安装的笔记,如果是在公司内部或者是部门内部还是很有用处的,比较看中的功能有和g ...
- Python3 与 C# 面向对象之~异常相关
周末多码文,昨天晚上一篇,今天再来一篇: 在线编程:https://mybinder.org/v2/gh/lotapp/BaseCode/master 在线预览:http://github.les ...
- Linux下使用pv监控进度
使用pv移动文件 pv example.mkv > /tmp/example.mkv 使用pv监控dd pv -cN source < example.iso | dd of=/dev/s ...
- 【听RQY大佬“训话”有感】
今天听了山东省“红太阳”——RQY大佬(dalao获奖传送门)的讲话,做一下总结及感悟: 总结: 1.基础重要!!!.基础重要!!!.基础重要!!!(重要的事情说三遍) 只要基础好了,后面知识都很简单 ...
- 无法删除foo.length
- Jquery Mobile表单
三个前提: 1.每个form必须设置method和action属性 2.每个form必须有页面范围内唯一的id标识 3.每个form必须有一个label标签,通过设置它的for属性来匹配元素的id & ...
- Jquery Mobile基本元素
移动端框架 安装: CDN: <link rel="stylesheet" href="http://code.jquery.com/mobile/1.3.2/jq ...