题目链接

任意一条线上的三个数的和都等于9,顺时针,从最小的外圈开始,得到的序列是:432621213

和             序列

9位的字符串;三角环所能形成的最大字符串为432621513。

使用数字1到10,通过不同的安排,可以得到16位或17位的字符串。五角环所能形成的最大的16位的字符串是什么?

16位的字符,10在外圈

17位的字符,10在内圈

求最大的字符串

6,7,8,9,10应该在外圈,1,2,3,4,5在内圈

2*(1+2+3+4+5) +6+7+8+9+10 = 70,每三个数的和是14

下面其实可以手工做出来了

以外圈最小的数开始:6,在1-5找出两个数使得这三个数的和是14只有5,3,最大数,5要在中间

外圈数还剩:7,8,9,10,内圈数还剩:1,2,4.在3所在的线上还差11,只有10+1=11

外圈数还剩:7,8,9,内圈数还剩:2,4.在1所在的线上还差13,只有9+4=11

外圈数还剩:7,8,内圈数还剩:2

下面就是这样的了

答案就是:6531031914842725

下面用Python暴露破解

导入产生排列的包

from itertools import permutations

下面你该知道怎么做了吧

遍历所有的排列,选择满足上面条件的数

全部程序 :

from itertools import permutations

import time as time

def run():
digits=['1','2','3','4','5','6','7','8','9','10']
perm = permutations(digits)
res = 0
for p in perm:
arr = map(int,p)
candidate = p[0] + p[1] + p[2] +\
p[3] + p[2] + p[4]+\
p[5] + p[4] + p[6]+\
p[7] + p[6] + p[8]+\
p[9] + p[8] + p[1];
# print candidate
if arr[0] > arr[3] or arr[0]> arr[5] or arr[0] > arr[7] or arr[0]> arr[9]:continue
if arr[1]==10 or arr[2]==10 or arr[4]==10 or arr[8] ==10 :continue
if (arr[0]+arr[1]+arr[2]) != (arr[3] + arr[2] + arr[4]) :continue
if (arr[0]+arr[1]+arr[2]) != (arr[5] + arr[4] + arr[6]) :continue
if (arr[0]+arr[1]+arr[2]) != (arr[7] + arr[6] + arr[8]) :continue
if (arr[0]+arr[1]+arr[2]) != (arr[9] + arr[8] + arr[1]) :continue
if int(candidate)>res and len(candidate)==16:
res = int(candidate)
# print res ,arr print res if __name__ == '__main__':
start = time.time()
run()
print "running time:",(time.time() - start),'s'

结果

6531031914842725
running time: 30.3180000782 s

这个时间真是太长了。

package project61;

public class P68{
int[] p = {1,2,3,4,5,6,7,8,9,10};
void run(){
for(int i=1;i<20;i++){
GetNextPerm();
System.out.println(""+p[0]+p[1]+p[2]+p[3]+p[4]+p[5]+p[6]+p[7]+p[8]+p[9]);
} String result="";
while(true){
if(!GetNextPerm()) break;
if(CheckResult()){
String candidate ="" + p[0] + p[1] + p[2]
+ p[3] + p[2] + p[4]
+ p[5] + p[4] + p[6]
+ p[7] + p[6] + p[8]
+ p[9] + p[8] + p[1];
System.out.println(candidate);
}
} }
// 类似于快速排序
boolean GetNextPerm(){
int N = p.length;
int i= N -1;
while(p[i-1]>=p[i]){
i--;
if(i<1) return false;
}
int j = N;
while(p[j-1]<=p[i-1]){
j = j-1;
}
swap(i-1,j-1);
i++;
j=N;
while(i<j){
swap(i-1,j-1);
i++;
j--;
} return true; }
boolean CheckResult(){
if(p[1]==10||
p[2]==10||
p[4]==10||
p[8]==10) return false;
if(p[0] > p[3]||
p[0] > p[5]||
p[0] > p[7]||
p[0] > p[9]) return false;
if(p[0] + p[1]+ p[2] != p[3] + p[2] +p[4]) return false;
if(p[0] + p[1]+ p[2] != p[5] + p[4] +p[6]) return false;
if(p[0] + p[1]+ p[2] != p[7] + p[6] +p[8]) return false;
if(p[0] + p[1]+ p[2] != p[9] + p[8] +p[1]) return false;
return true;
}
void swap(int i,int j){
int k=p[i];
p[i] = p[j];
p[j] = k;
}
public static void main(String[] args){
long t0 = System.currentTimeMillis();
new P68().run();
long t1 = System.currentTimeMillis();
System.out.println("running time:"+(t1 - t0)+"ms");
}
}

这个自己参数所以的排列,再找满足条件的数

程序跑的倒是很快

6531031914842725
running time:77ms

参考链接

欧拉工程第68题:Magic 5-gon ring的更多相关文章

  1. 欧拉工程第69题:Totient maximum

    题目链接 欧拉函数φ(n)(有时也叫做phi函数)可以用来计算小于n 的数字中与n互质的数字的个数. 当n小于1,000,000时候,n/φ(n)最大值时候的n. 欧拉函数维基百科链接 这里的是p是n ...

  2. 欧拉工程第70题:Totient permutation

    题目链接 和上面几题差不多的 Euler's Totient function, φ(n) [sometimes called the phi function]:小于等于n的数并且和n是互质的数的个 ...

  3. 欧拉工程第67题:Maximum path sum II

    By starting at the top of the triangle below and moving to adjacent numbers on the row below, the ma ...

  4. 欧拉工程第66题:Diophantine equation

    题目链接 脑补知识:佩尔方差 上面说的貌似很明白,最小的i,对应最小的解 然而我理解成,一个循环的解了,然后就是搞不对,后来,仔细看+手工推导发现了问题.i从0开始变量,知道第一个满足等式的解就是最小 ...

  5. 欧拉工程第65题:Convergents of e

    题目链接 现在做这个题目真是千万只草泥马在心中路过 这个与上面一题差不多 这个题目是求e的第100个分数表达式中分子的各位数之和 What is most surprising is that the ...

  6. 欧拉工程第56题:Powerful digit sum

    题目链接   Java程序 package projecteuler51to60; import java.math.BigInteger; import java.util.Iterator; im ...

  7. 欧拉工程第55题:Lychrel numbers

    package projecteuler51to60; import java.math.BigInteger; import java.util.Iterator; import java.util ...

  8. 欧拉工程第54题:Poker hands

    package projecteuler51to60; import java.awt.peer.SystemTrayPeer; import java.io.BufferedReader; impo ...

  9. 欧拉工程第53题:Combinatoric selections

    package projecteuler51to60; class p53{ void solve1(){ int count=0; int Max=1000000; int[][] table=ne ...

随机推荐

  1. ASP.NET MVC 表单的几种提交方式

    下面是总结一下在ASP.NET MVC中表单的几种提交方式. 1.Ajax提交表单 需要引用 <script type="text/javascript" src=" ...

  2. WIN10主动推升级,有点意思

    不论正与盗,皆推升级,是否一样可用?

  3. WPF 绑定三(绑定List中指定的字符串)

    xaml: <Window x:Class="WpfApplication1.Window3" xmlns="http://schemas.microsoft.co ...

  4. JS中的this用法详解

    随着对js的深入学习和使用,你会发现它里面包含了很多令人困惑的机制,比如对象.闭包.原型链继承等等,而这其中肯定包含令你现在或者曾经费解的this,如果你不把心一横,花点时间还真不明白这个this的用 ...

  5. CENTOS6.2系统日志rsyslog替换默认的日志服务syslog 转载自http://www.phpboy.net/linux/648.html

    最近遇到配置centos 6.2的sshd及sftp日志,发现/etc/syslog.conf文件不存在, 然后: #rpm -qa | grep syslog 出来的是 rsyslog-5.8.10 ...

  6. 节点属性(DOM对象)

    节点属性 在文档对象模型 (DOM) 中,每个节点都是一个对象.DOM 节点有三个重要的属性 : 1. nodeName : 节点的名称 2. nodeValue :节点的值 3. nodeType ...

  7. 不再用.NET框架

    .NET 平台很棒.真的很棒.直到它不再那么棒.我为什么不再用 .NET?简单来说,它限制了我们选择的能力(对我来说很重要),转移了我们的注意力,使得我们向内认知它的安全性,替代了帮助我们认知外面广阔 ...

  8. 每日一“酷”之string

    介绍:string模块可以追溯到最早的Python版本中.现在很多的被移植为str和unicode对象的方法,在python3.0中会被完全去除.string模块中,有很多有用的常量和累,用来处理st ...

  9. mapreduce 实现pagerank

    输入格式: A 1 B,C,D B 1 C,Dmap: B A 1/3 C A 1/3 D A 1/3 A |B,C,D C B 1/2 D B 1/2 B |C,Dreduce: B (1-0.85 ...

  10. MS MQ 消息队列

    一.安装 先在 控制面板—程序和功能—打开或关闭我windows功能.把 msmq全勾起来 如下图: 二.右击-消息对列—属性—服务器安全性,把禁用未经身份验证的RPC调用勾去掉, 三.然后在专用队列 ...