[project euler] program 4
上一次接触 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 的思路。
参考链接:
[project euler] program 4的更多相关文章
- Python练习题 029:Project Euler 001:3和5的倍数
开始做 Project Euler 的练习题.网站上总共有565题,真是个大题库啊! # Project Euler, Problem 1: Multiples of 3 and 5 # If we ...
- Project Euler 9
题意:三个正整数a + b + c = 1000,a*a + b*b = c*c.求a*b*c. 解法:可以暴力枚举,但是也有数学方法. 首先,a,b,c中肯定有至少一个为偶数,否则和不可能为以上两个 ...
- 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 ...
- project euler 169
project euler 169 题目链接:https://projecteuler.net/problem=169 参考题解:http://tieba.baidu.com/p/2738022069 ...
- 【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 × ...
- Project Euler 第一题效率分析
Project Euler: 欧拉计划是一系列挑战数学或者计算机编程问题,解决这些问题需要的不仅仅是数学功底. 启动这一项目的目的在于,为乐于探索的人提供一个钻研其他领域并且学习新知识的平台,将这一平 ...
- Python练习题 049:Project Euler 022:姓名分值
本题来自 Project Euler 第22题:https://projecteuler.net/problem=22 ''' Project Euler: Problem 22: Names sco ...
- Python练习题 048:Project Euler 021:10000以内所有亲和数之和
本题来自 Project Euler 第21题:https://projecteuler.net/problem=21 ''' Project Euler: Problem 21: Amicable ...
- Python练习题 047:Project Euler 020:阶乘结果各数字之和
本题来自 Project Euler 第20题:https://projecteuler.net/problem=20 ''' Project Euler: Problem 20: Factorial ...
随机推荐
- 玩转Windows服务系列汇总
玩转Windows服务系列汇总 创建Windows服务 Debug.Release版本的注册和卸载及其原理 无COM接口Windows服务启动失败原因及解决方案 服务运行.停止流程浅析 Windows ...
- Spark2 ML 学习札记
摘要: 1.pipeline 模式 1.1相关概念 1.2代码示例 2.特征提取,转换以及特征选择 2.1特征提取 2.2特征转换 2.3特征选择 3.模型选择与参数选择 3.1 交叉验证 3.2 训 ...
- 【WCF】终结点的监听地址
终结点主要作用是向客户端公开一些信息入口,通过这个入口,可以找到要调用的服务操作.通常,终结点会使用三个要素来表述,我记得老蒋(网名:Artech,在园子里可以找到他)在他有关WCF的书里,把这三要素 ...
- Hawk 1.1 快速入门(链家二手房)
链家的同学请原谅我,但你们的网站做的真是不错. 1. 设计网页采集器 我们以爬取链家二手房为例,介绍网页采集器的使用.首先双击图标,加载采集器: 在最上方的地址栏中,输入要采集的目标网址,本次是htt ...
- eclipse打开文件所在目录
设置 添加扩展工具,添加步骤如下: Run-->External Tools-->External Tools Configurations... new 一个 programlocati ...
- PHP_环境配置_python脚本_2017
Apache配置 需要安装:VC2015 httpd-2.4.16-win32-VC14.zip VC14就是2015的环境. 又比如:php-5.6.12-Win32-VC11-x86 VC11就是 ...
- 从游戏脚本语言说起,剖析Mono所搭建的脚本基础
0x00 前言 在日常的工作中,我偶尔能遇到这样的问题:“为何游戏脚本在现在的游戏开发中变得不可或缺?”.那么这周我就写篇文章从游戏脚本聊起,分析一下游戏脚本因何出现,而mono又能提供怎样的脚本基础 ...
- 【十大经典数据挖掘算法】AdaBoost
[十大经典数据挖掘算法]系列 C4.5 K-Means SVM Apriori EM PageRank AdaBoost kNN Naïve Bayes CART 1. 集成学习 集成学习(ensem ...
- ES6笔记(5)-- Generator生成器函数
系列文章 -- ES6笔记系列 接触过Ajax请求的会遇到过异步调用的问题,为了保证调用顺序的正确性,一般我们会在回调函数中调用,也有用到一些新的解决方案如Promise相关的技术. 在异步编程中,还 ...
- 在公有云AZURE上部署私有云AZUREPACK以及WEBSITE CLOUD(二)
前言 (二)建立虚拟网络环境,以及域控和DNS服务器 1搭建虚拟网络环境 在Azure上创建虚拟网络.本例选择的是东南亚数据中心.后面在创建虚机的时候,也选择这个数据中心. VNet Name: ...