来做几道小学奥数题:

红花映绿叶 * 春 = 叶绿映花红

我们热爱科学 * 学 = 好好好好好好

少年早立志向 + 少年早立志向 = 有志何惧少年

学生 + 好学生 + 三好学生 = 2004

数据发生器源码 [data_generator.py]:

# encoding=utf8

import itertools

class DataGenerator(object):

"""

DataGenerator:数生成器

"""

def __init__(self, count=6, digitals=[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]):

super(DataGenerator, self).__init__()

self._count = count

self._digitals = digitals

def get_digitals(self):

return self._digitals

def generate_numbers(self):

"""

获取定长的由数字组成的数,例如:

_count = 6, 返回所有的可能数字组合,对应的数,对应的逆序数

5 -> [([1, 2, 3, 4, 5], 12345, 54321), [1, 2, 3, 4, 6], 12346, 64321), ...]

"""

all = list(itertools.permutations(self._digitals, self._count))

return [(x,

self._generate_numbers_from_digit_list(x),

self._generate_numbers_from_digit_list(x, True))

for x in all if len(set(x)) == self._count and x[-1] != 0]

def _generate_numbers_from_digit_list(self, digit_list, revert=False):

"""

由一个数字列表返回对应的数,例如:

[1, 2, 3, 4, 5], False -> 12345

[1, 2, 3, 4, 5], True  -> 54321

"""

return sum([digit * 10**index for index, digit in enumerate(digit_list if not revert else digit_list[::-1])])

class NumberAttr(object):

"""

NumberAttr:数属性

"""

def __init__(self, number):

super(NumberAttr, self).__init__()

self._number = number

def get_digit_by_pos(self, pos):

"""

获取数某个位置上的数字

1234, 1 -> 4

4321, 1 -> 1

"""

number = self._number

while pos:

(div, mod) = divmod(number, 10)

number = div

pos -= 1

return mod

def get_number_bits(self):

"""

获取数共有多少位

123 -> 3

4321 -> 4

"""

number = self._number

count = 0

while number:

(div, mod) = divmod(number, 10)

number = div

count += 1

return count

解奥数题源码 [olympic_maths.py]:

# encoding=utf8

from data_generator import DataGenerator

from data_generator import NumberAttr

def abcde_multiple_f_edcba():

# 红花映绿叶 * 春 = 叶绿映花红

generator = DataGenerator(5)

datas = generator.generate_numbers()

digitals = generator.get_digitals()

for numbers in datas:

(x, abcde, edcba) = numbers

if edcba > abcde and not edcba % abcde:  # 可以整除

f = edcba // abcde

if f not in x and f in digitals:

print("{} X {} = {}".format(abcde, f, edcba))

def abcedf_multiple_f_gggggg():

# 我们热爱科学 * 学 = 好好好好好好

count = 6

generator = DataGenerator(count)

datas = generator.generate_numbers()

for numbers in datas:

(x, abcdef, _) = numbers

f = x[0]

gggggg = abcdef * f

(div, mod) = divmod(gggggg, 111111)

attr = NumberAttr(gggggg)

if attr.get_number_bits() == count and not mod and div <= 9:

print("{} X {} = {}".format(abcdef, f, gggggg))

def abcdef_add_abcdef_gehiba():

# 少年早立志向 + 少年早立志向 = 有志何惧少年

count = 6

generator = DataGenerator(count)

datas = generator.generate_numbers()

for numbers in datas:

(x, abcdef, _) = numbers

gehiba = abcdef + abcdef

attr = NumberAttr(gehiba)

a = attr.get_digit_by_pos(1)

b = attr.get_digit_by_pos(2)

i = attr.get_digit_by_pos(3)

h = attr.get_digit_by_pos(4)

e = attr.get_digit_by_pos(5)

g = attr.get_digit_by_pos(6)

if a == x[5] and b == x[4] and e == x[1] and \

g not in x and h not in x and i not in x and \

g != h and g != i and h != i and \

attr.get_number_bits() == count:

print("{} + {} = {}".format(abcdef, abcdef, gehiba))

def abcd_add_bcd_add_cd_2004():

# 学生 + 好学生 + 三好学生 = 2004

generator = DataGenerator(4)

datas = generator.generate_numbers()

for numbers in datas:

(x, abcd, _) = numbers

cd = x[0] + 10 * x[1]

bcd = cd + 100 * x[2]

if abcd + bcd + cd == 2004:

print("{} + {} + {} = 2004".format(abcd, bcd, cd))

if __name__ == "__main__":

abcde_multiple_f_edcba()

abcedf_multiple_f_gggggg()

abcdef_add_abcdef_gehiba()

abcd_add_bcd_add_cd_2004()

pass

输出结果:

21978 X 4 = 87912

142857 X 7 = 999999

468532 + 468532 = 937064

1468 + 468 + 68 = 2004

[Finished in 3.2s]

(-- 有些内容只在小龙家发,可关注同名“趣Python”号,谢谢 --)

python解奥数题_#python# 来做奥数题相关推荐

  1. 笔试代码题--搜狗--汪仔做对的题数范围

    笔试代码题--搜狗--汪仔做对的题数范围 注意:朋友对了k道题,不一定是str1中的所有对.     * 题目:总共n道题,汪仔知道朋友做的k道题是对的,他知道自己做的题目是str1,问最少对几道,最 ...

  2. python解压zip文件_python-29 python解压压缩包的几种方法

    这里讨论使用Python解压例如以下五种压缩文件: .gz .tar .tgz .zip .rar 简单介绍 gz: 即gzip.通常仅仅能压缩一个文件.与tar结合起来就能够实现先打包,再压缩. t ...

  3. python嵩天课堂笔记_[Python机器学习]强化学习笔记(嵩天礼欣老师mooc第三周)

    [Python机器学习]强化学习笔记(嵩天礼欣老师mooc第三周) [Python机器学习]强化学习笔记(嵩天礼欣老师mooc第三周) 目录 强化学习 定义 马尔科夫决策过程 基本元素 值函数 最优值 ...

  4. 四全集学python选哪种电脑_“Python教程哪个版本最适合学习?“python教程全集

    python教程,求一套比较好的python教程 好不好主要先看你自己,理解能力样,有没有接触过编程,有没础,这很重要: 看教程,能不能先给你建立起知识体系框架,许多教程一上来就直接给你灌输知识很让人 ...

  5. python如何设置字体大小_[Python Basic]如何设置 Python 的运行环境

    一如既往地, 咱们不仅仅是学习 Python 的基础知识, 同时, 也按照2/8 规律学习关键知识的关键部分 - python 核心词汇 如何安装 Python 下载 Python 打开网址:http ...

  6. python小软件制作教程_[Python]手把手教程:Python制作番茄钟

    这篇文章是根据Udacity的免费课程 编程基础:Python所做的笔记,适合零基础学习Python 我们先了解这个番茄钟的概念,就是每隔一段固定的时间就提醒你休息一下,可能是播放一段音乐, 弹出一个 ...

  7. python如何检验显著性差异_[Python] 如何证明两组样本有显著性差异(t-test假设检验) | 学步园...

    现有两组样本数据,假如它们分别基于两套不同的方法,或者测于不同的设备,又或是出自两个人之手,如何证明它们有或没有显著性差别呢?当然可以拿个Excel表把数据画个图,然后找一堆人来投票,看觉得差不多还是 ...

  8. js逻辑训练题_二建冲刺必刷300题!精选历年真题+母子题+模考易错题!

    订阅公众号,回复[口诀],获取完整版实务口诀 你是不是常常疑惑为什么同样在做题,同样熬通宵,同样很努力,为什么有人顺利拿证,有人却因几分之差黯然落榜? 因为二建不仅拼努力的程度,更要拼对精准二建信息的 ...

  9. python解一元二次方程虚根_怎么用python解一元二次方程

    import numpy as npdef solve_quad(a,b,c): if a == 0: print('您输入的不是二次方程!') else: delta = b*b-4*a*c x = ...

最新文章

  1. python twisted教程_Python Twisted系列教程16:Twisted 进程守护
  2. double类型数值计算出现误差的解决办法
  3. 2019,一线程序员该如何面对中年危机?
  4. 子类如果不实例化则不会调用它自身的静态构造函数
  5. CSS FILTERS:CSS过滤器能够做什么?
  6. Spread for Windows Forms 7新功能使用指南
  7. gearman初探(一、编译和安装)
  8. Divide and Sum CodeForces - 1445D(排列组合+逆元)
  9. pmp 成本估算准确高_如何更准确地估算JavaScript中文章的阅读时间
  10. MySQL06:变量、存储过程和函数、流程控制结构
  11. dede搜索正文内容search.php,织梦dede后台怎么查找文章内容关键词
  12. 50 招教你防止黑客入侵,适用于入门小白到专业人员
  13. Linux之date命令
  14. MXRuntimeUtils,替代 [NSObject performSelector object object ]的工具
  15. XBMC源代码分析 7:视频播放器(dvdplayer)-输入流(以libRTMP为例)
  16. 软件设计原则(三) 依赖倒置原则
  17. 佰马科技参加第16届中国道路照明论坛,助力智慧灯杆建设
  18. 电商后台管理系统——JavaWeb项目 毕业设计论文
  19. 最小二乘法之一元线性拟合
  20. java入门12--面向对象(上)

热门文章

  1. UE4-常见的宏-UFUNCTION
  2. 江苏省2021年9月全国计算机等级考试考试延期至12月4日至6日举行
  3. 你的公司到底是技术驱动还是业务驱动?如何权衡?
  4. re:Invent现场直击:无处不在的云计算
  5. ssm毕设项目基于HTML5的流浪动物领养平台yww0b(java+VUE+Mybatis+Maven+Mysql+sprnig)
  6. 再看tomcat的体会
  7. 开源许可证类型 Open Source Code/ Copyleft/ Permissive
  8. mybatis 分页-- 传入page对象
  9. 2021年安全员-C证免费试题及安全员-C证复审模拟考试
  10. android 智灵键 api,一键开启新世界大门 华为荣耀V8智灵键体验