Python:每日一题001

Posted Nicholas--Altshuler

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python:每日一题001相关的知识,希望对你有一定的参考价值。

Python:每日一题001

 

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

**程序分析:可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去 掉不满足条件的排列。

 

个人解题思路

利用排列组合知识算出总共有4X3X2= 24个数,构造每个数加入列表中,打印输出。

  import random
  li = ["1","2","3","4"]
  all_sum_num = 4*4*4
  new_sum_list = []
  for i in range(all_sum_num):
      choose_li =  random.sample(li,3)
      new_num_str = "".join(choose_li)
      new_sum_list.append(new_num_str)
  num_set = set(new_sum_list)
  num_str_list =  list(num_set)
  print(num_str_list)
  print(len(num_str_list))

  

分析:这种写法有个漏洞,就是随机取出的3个数并不能完全取完所有可能的数,造成结果不唯一,每次运行程序可能结果都不一致。

 

参考解答方法:

  li = []
  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:
                  num = i*100 + j*10 + k
                  li.append(num)
  ?
  print(li)
  print(len(li))

  

分析:用3个for循环,加上if条件判断,将产生的数加入列表即可

上述代码可以继续精简

  
  li1 = [1,2,3,4]
  li2  = [a*100 + b*10 +c for a in li1 for b in li1 for c in li1 if a != b and a != c and b != c]
  print(li2)
  print(len(li2))

  

分析:采用列表生成式,分别对百位、十位、个位的数字进行生成并合成列表的元素。

 

 

 

 

(本文编号001,首发于2018年9月11日)

以上是关于Python:每日一题001的主要内容,如果未能解决你的问题,请参考以下文章

Java每日一题20161228

​老男孩教育每日一题-第79天-命令风暴:打印出001 002 003 这样的格式的数字

每日道代码题001- PYTHON基础复习

Python:每日一题004

Python:每日一题005

LeetCode 1024. 视频拼接(每日一题)