上一次接触 project euler 还是2011年的事情,做了前三道题,后来被第四题卡住了,前面几题的代码也没有保留下来。

今天试着暴力破解了一下,代码如下:

(我大概是第 172,719 个解出这道题的人)

program 4

A palindromic number reads the same both ways. The largest palindrome made from the product of two 2-digit numbers is 9009 = 91 × 99. Find the largest palindrome made from the product of two 3-digit numbers.

 using System;

 public class PlindromeNumber
{
static void Main()
{
long total;
long max = ;
int pre = ;
int post = ;
for(int i = ; i > ; i--)
{
for(int j = ; j > ; j--)
{
total = i*j;
if(CheckPlindromeNumber(total))
{
if(max < total)
{
max = total;
pre = i;
post = j;
}
}
}
}
Console.WriteLine("Max Plindrome Number is : " + max + " = " + pre + " * " + post);
} static bool CheckPlindromeNumber(long number)
{
bool result = false;
if(number/ == )
{
return false;
}
if( (number/ == number%) && (number/% == number/%) && (number/% == number/%) )
{
result = true;
}
return result;
}
}

试着使用 Vim 写了这样一段代码,后来又花了不少时间去配置 Vim。

作为一个 Vim 的新手,花费了不少时间,安装了 pathogen.vim 插件,然后装了 vim-csharp 插件,初步试用没有感觉有什么大的帮助。

题目做对之后,又看了一下别人的解题思路,其实之前也隐约想到过以下的两种办法,不过去没有最终分析出一个可行的办法。

解法一来自于 euler 论坛的 etatsui,就是假设这个 palindrome 是 abccba 的形式,那么:

palindrome = a * 100000 + b * 10000 + c * 1000 + c * 100 + b * 10 + a * 1

palindrome = 100001a + 10010b + 1100c

palindrome = 11(9091a + 910b + 100c) = m * n

其中 a, b, c 是 1 位数, m, n 是 3 位数

假设,11*10 < m < 11*99

(这个假设是一个比较有意思的地方,从上面的算式可以知道,palindrome 有一个因子是 11,那么我们可以假设 m 是包括这个因子的,又因为有 m 是 3 位数这样的限制,所以可以这样假设)

etatsui 提供的代码中有一个小的 bug,改正之后的代码如下:

 using System;

 class Palindrome_etatsui
{
static void Main()
{
long num;
long result = ;
for(int a=; a>=; a--)
{
for(int b=; b>=; b--)
{
for(int c=; c>=; c--)
{
num = * a + * b + * c;
// Console.WriteLine(num);
for(int divider=; divider>=; divider--)
{
// look for divider that can divide
// and also doesn't make n > 999
if ((num%divider) == )
{
if ((num/divider) > )
{
break;
}
else
{
result = num * ; // found it
Console.WriteLine("Palindrom(etatsui) is : " + result);
return;
}
}
else
{
continue;
}
}
}
}
}
}
}

在 euler 的论坛上,还看到了 Begoner 有一个用笔来解答的方案,不过似乎有一点小瑕疵。

假设 palindrame 的两个因子为 abc 和 def,那么

abc * def = (100a + 10b + c)*(100d + 10e + f)

乘法运算得

100cd + 10ce + cf  

1000bd + 100be + 10bf

10000ad + 1000ae + 100af

这个时候,Begoner 假设 palindrone 的第一个数字为 9 (我觉的这里有点问题),然后 cf 的末尾数一定是 9,而乘积为 9 的数,末尾只有三种可能:1 和 9,3 和 3,7 和 7。

所以,这两个因子应该以 9 开头,而以 1,3,4,9 结尾,并且其中一个一定能被 11 整除(关于被 11 整除的原因和上面的一个方法一样)。

而 900 到 1000 之间,能被 11 整除的,只有:902,913, 924, 935,946,957,968, 979, 990 这 9 个数。

从而满足以上两个条件的只有:913,957,979

这样就有:

(900 + 10 + 3)(900 + 10x + 3)

(900 + 50 + 7)(900 + 10x + 7)

(900 + 70 + 9)(900 + 10x + 1)

整理之后:

824439  + 9130x

867999  + 9570x

882079  + 9790x

然后可以让 x 从 9 到 0 开始检测。(Begoner 在这里只选取了第一个式子,然后得出 x 一定等于9,否则就不能满足让 palindrame 的第一位是 9,有点看不明白)

这个方法似乎没有办法用程序来表达,另外有比较明显的拼凑的痕迹,不推荐只是记录一下 Begoner 的思路。

参考链接:

  1. [Project Euler] Problem 4

[project euler] program 4的更多相关文章

  1. Python练习题 029:Project Euler 001:3和5的倍数

    开始做 Project Euler 的练习题.网站上总共有565题,真是个大题库啊! # Project Euler, Problem 1: Multiples of 3 and 5 # If we ...

  2. Project Euler 9

    题意:三个正整数a + b + c = 1000,a*a + b*b = c*c.求a*b*c. 解法:可以暴力枚举,但是也有数学方法. 首先,a,b,c中肯定有至少一个为偶数,否则和不可能为以上两个 ...

  3. Project Euler 44: Find the smallest pair of pentagonal numbers whose sum and difference is pentagonal.

    In Problem 42 we dealt with triangular problems, in Problem 44 of Project Euler we deal with pentago ...

  4. project euler 169

    project euler 169 题目链接:https://projecteuler.net/problem=169 参考题解:http://tieba.baidu.com/p/2738022069 ...

  5. 【Project Euler 8】Largest product in a series

    题目要求是: The four adjacent digits in the 1000-digit number that have the greatest product are 9 × 9 × ...

  6. Project Euler 第一题效率分析

    Project Euler: 欧拉计划是一系列挑战数学或者计算机编程问题,解决这些问题需要的不仅仅是数学功底. 启动这一项目的目的在于,为乐于探索的人提供一个钻研其他领域并且学习新知识的平台,将这一平 ...

  7. Python练习题 049:Project Euler 022:姓名分值

    本题来自 Project Euler 第22题:https://projecteuler.net/problem=22 ''' Project Euler: Problem 22: Names sco ...

  8. Python练习题 048:Project Euler 021:10000以内所有亲和数之和

    本题来自 Project Euler 第21题:https://projecteuler.net/problem=21 ''' Project Euler: Problem 21: Amicable ...

  9. Python练习题 047:Project Euler 020:阶乘结果各数字之和

    本题来自 Project Euler 第20题:https://projecteuler.net/problem=20 ''' Project Euler: Problem 20: Factorial ...

随机推荐

  1. 浅谈命令查询职责分离(CQRS)模式

    在常用的三层架构中,通常都是通过数据访问层来修改或者查询数据,一般修改和查询使用的是相同的实体.在一些业务逻辑简单的系统中可能没有什么问题,但是随着系统逻辑变得复杂,用户增多,这种设计就会出现一些性能 ...

  2. salesforce 零基础学习(五十五)java通过SOAP方式定时访问某个文件然后插入到sObject中

    项目源码:https://github.com/zhangyueqidlmu/SOAP-Access-SFDC.git 项目背景:salesforce端相关数据需要其他系统提供,其他系统可以提供相关数 ...

  3. WCF学习之旅—WCF服务的Windows 服务程序寄宿(十一)

    上接    WCF学习之旅—WCF服务部署到IIS7.5(九) WCF学习之旅—WCF服务部署到应用程序(十) 七 WCF服务的Windows 服务程序寄宿 这种方式的服务寄宿,和IIS一样有一个一样 ...

  4. ElasticSearch 5学习(7)——分布式集群学习分享2

    前面主要学习了ElasticSearch分布式集群的存储过程中集群.节点和分片的知识(ElasticSearch 5学习(6)--分布式集群学习分享1),下面主要分享应对故障的一些实践. 应对故障 前 ...

  5. Oracle从文件系统迁移到ASM存储

    环境:RHEL 6.4 + Oracle 11.2.0.4 需求:数据库存储由文件系统迁移到ASM 数据库存储迁移到ASM磁盘组 1.1 编辑参数文件指定新的控制文件路径 1.2 启动数据库到nomo ...

  6. PL/sql使用总结

    ①右键表拖入到sql窗口中,可自动生成脚本: ②可以和Excel直接复制粘贴: ③F5查看执行计划: ④有环境变量则用环境变量,否则就会去注册表中找对应的值 ⑤oracle客户端设置编码只是为了告诉数 ...

  7. 分布式系统理论基础 - CAP

    引言 CAP是分布式系统.特别是分布式存储领域中被讨论最多的理论,“什么是CAP定理?”在Quora 分布式系统分类下排名 FAQ 的 No.1.CAP在程序员中也有较广的普及,它不仅仅是“C.A.P ...

  8. Events基本概念----Beginning Visual C#

    span.kw { color: #007020; font-weight: bold; } code > span.dt { color: #902000; } code > span. ...

  9. Scala集合和Java集合对应转换关系

    作者:Syn良子 出处:http://www.cnblogs.com/cssdongl 转载请注明出处 用Scala编码的时候,经常会遇到scala集合和Java集合互相转换的case,特意mark一 ...

  10. DOM 事件深入浅出(二)

    在DOM事件深入浅出(一)中,我主要给大家讲解了不同DOM级别下的事件处理程序,同时介绍了事件冒泡和捕获的触发原理和方法.本文将继续介绍DOM事件中的知识点,主要侧重于DOM事件中Event对象的属性 ...