EularProject 43: 带条件约束的排列组合挑选问题
Sub-string divisibility
Problem 43
The number, 1406357289, is a 0 to 9 pandigital number because it is made up of each of the digits 0 to 9 in some order, but it also has a rather interesting sub-string divisibility property.
Let d1 be the 1st digit, d2 be the 2nd digit, and so on. In this way, we note the following:
d2d3d4=406 is divisible by 2
d3d4d5=063 is divisible by 3
d4d5d6=635 is divisible by 5
d5d6d7=357 is divisible by 7
d6d7d8=572 is divisible by 11
d7d8d9=728 is divisible by 13
d8d9d10=289 is divisible by 17
Find the sum of all 0 to 9 pandigital numbers with this property.
Answer:
16695334890
python code:
from functools import reduce
def helpfunc1(x,y):
return 10*x+y
def helpfunc2(lst):
return reduce(helpfunc1,lst)
def Descriminent(k,value):
if k==3:
if value%17==0:
return True
else:
return False
if k==4:
if value%13==0:
return True
else:
return False
if k==5:
if value%11==0:
return True
else:
return False
if k==6:
if value%7==0:
return True
else:
return False
if k==7:
if value%5==0:
return True
else:
return False
if k==8:
if value%3==0 and (value//10)%2==0:
return True
else:
return False
return True
def func(result,charlist):
total=0
length=len(result)
if length>2 and length<9:
if Descriminent(length,helpfunc2(result[0:3]))==False:
return 0
if length==10:
return helpfunc2(result)
if len(charlist)>0:
for i in range(0,len(charlist)):
resultNext=result.copy()
charlistNext=charlist.copy()
resultNext.insert(0,charlistNext[i])
del charlistNext[i]
total+=func(resultNext,charlistNext)
return total
charlist=[0,1,2,3,4,5,6,7,8,9]
result=[]
print(func(result,charlist))
解题思路:使用递归
提高效率点:从后往前递归
计算时间<1s
由于可以整除2的数比整除17的多的太多了,其它的一样道理。因此相比于从后往前。从前往后递归的话无用功将成阶乘阶数添加。
EularProject论坛上的一个非递归版本号
digits = ['1','2','3','4','5','6','7','8','9','0']
divisors = [13, 11, 7, 5, 3, 2, 1]
res = []
res1 = []
j = 1
while j*17 < 1000:
N = j*17
Nstr = str(N)
if len(set(Nstr)) == len(Nstr):
if N < 100: res.append('0' + str(N))
else: res.append(str(N))
j += 1
for div in divisors:
for Nstr in res:
for d in digits:
if d not in Nstr:
Newstr = d + Nstr[:2]
if int(Newstr)%div == 0:
res1.append(d + Nstr)
res = res1
res1 = []
tot = 0
for Nstr in res:
print(Nstr)
tot += int(Nstr)
print(tot)
EularProject 43: 带条件约束的排列组合挑选问题的更多相关文章
- Laravel 5.2数据库--多个关联关系,带条件约束的渴求式加载的问题
### 今天在连表获取数据的时候,老是获取不到想要的,确实有点无力适从的感觉. 归根到底,还是对laravel不够熟悉,至少是数据库操作那块. ### 问题是这样的: 我想要通过连表中间表,拿中间表的 ...
- python自带的排列组合函数
需求: 在你的面前有一个n阶的台阶,你一步只能上1级或者2级,请计算出你可以采用多少种不同的方法爬完这个楼梯?输入一个正整数表示这个台阶的级数,输出一个正整数表示有多少种方法爬完这个楼梯. 分析:提炼 ...
- 【专题】计数问题(排列组合,容斥原理,Prufer序列)
[容斥原理] 对于统计指定排列方案数的问题,一个方案是空间中的一个元素. 定义集合x是满足排列中第x个数的限定条件的方案集合,设排列长度为S,则一共S个集合. 容斥原理的本质是考虑[集合交 或 集合交 ...
- DataFactory使用和注意,排列组合
DataFactory使用和注意 mysql 连接ODBC开放数据库连接(Open Database Connectivity,ODBC)驱动程序 生成数据:int不能用 Build a compos ...
- hdu1521 排列组合(指数型母函数)
题意: 有n种物品,并且知道每种物品的数量ki.要求从中选出m件物品的排数. (全题文末) 知识点: 普通母函数 指数型母函数:(用来求解多重集的排列问题) n个元素,其中a1,a2, ...
- 排列 && 组合
最近编程经常遇到需要 排列&&组合(求子集) 的问题:遂整理一下. 1. 数字的排列与组合(递归):O(n!),O(nC(n,k)) * O(n) #include <stdio ...
- js 排列 组合 的一个简单例子
最近工作项目需要用到js排列组合,于是就写了一个简单的demo. 前几天在网上找到一个写全排列A(n,n)的code感觉还可以,于是贴出来了, 排列的实现方式: 全排列主要用到的是递归和数组的插入 比 ...
- HDU 1521 排列组合 指数型母函数
排列组合 Time Limit: 1000MS Memory Limit: 32768KB 64bit IO Format: %I64d & %I64u Submit Status D ...
- 【排列组合】ZSC1076: 数学、不容易系列之三——考新郎
国庆期间,省城刚刚举行了一场盛大的集体婚礼,为了使婚礼进行的丰富一些,司仪临时想出了有一个有意思的节目,叫做"考新郎",具体的操作是这样的: 首先,给每位新娘打扮得几乎一模一样,并 ...
随机推荐
- java实现网络爬虫
import java.io.IOException; import java.util.HashSet; import java.util.Set; import java.util.r ...
- MSSQL 常用操作
0.GUID去除横线和变换为小写 SELECT LOWER(REPLACE(LTRIM(NEWID()),'-','')) 1.IDENTITY 函数说明 IDENTITY ( data_type [ ...
- 二:熟悉 TCP/IP 协议
一篇文章带你熟悉 TCP/IP 协议(网络协议篇二) 同样的,本文篇幅也比较长,先来一张思维导图,带大家过一遍. 一图看完本文 一. 计算机网络体系结构分层 计算机网络体系结构分层计算机网络体系结构分 ...
- SSM 五:Spring核心概念
第五章:Spring核心概念 一.Spring Ioc 优点: 1.低侵入式设计 2.独立于各种应用服务器 3.依赖注入特性将组建关系透明化,降低耦合度 4.面向切面编程的特性允许将通用性任务集中式处 ...
- Java中swap()实现
Java中swap()实现 1.今天可爱的谭老师发了一道题目,使用java写方法交换Integer类型数据,而且入参固定了,题目请下图: 入参固定的话,当时想到的是重新定义一个自己的Integer类型 ...
- Spring的69个知识点
目录 Spring 概述 依赖注入 Spring beans Spring注解 Spring数据访问 Spring面向切面编程(AOP) Spring MVC Spring 概述 1. 什么是spri ...
- RabbitMQ之比较好的资料
http://mysql.taobao.org/index.php/Rabbitmq http://www.cnblogs.com/me-sa/archive/2012/10/17/rabbitmq_ ...
- MySQL 2006 超时
http://ronaldbradford.com/blog/sqlstatehy000-general-error-2006-mysql-server-has-gone-away-2013-01-0 ...
- js中变量的作用域、变量提升、链式作用域结构
一:作用域 在ES6之前,javascript没有块级作用域(一对{}即为一个块级作用域),只有全局作用域和函数作用域(局部),因此,对应的有全局变量和局部变量.在函数内部可以访问到全局变量,但在函数 ...
- 老男孩Python全栈开发(92天全)视频教程 自学笔记04
day4课程目录: 逻辑运算符 while循环 day4课程内容梳理: 逻辑运算符 算数运算符:+,-,*,/,%,** 比较运算符:< ,>, ==,<=,>=,!=, 逻辑 ...