- 浏览: 143422 次
- 性别:
- 来自: 01
文章分类
最新评论
-
kingj:
将if(node.RightTree==null||node. ...
在二元树中找出和为某一值的所有路径 -
kingj:
非递归的算法在下面这种情况下会有问题 ...
在二元树中找出和为某一值的所有路径 -
houxinbin:
DateUtil.getTimestampFromGregor ...
使用JFreeChart显示 Java 虚拟机中的空闲内存量 -
坏小子46110:
我在build comm.js的时候有个这个异常 不知道怎么解 ...
使用Java实现登陆WebQQ(带源码) -
to_zoe_yang:
公子_小王 写道怎么下载不下来呢? 估计TX现在肯定改接口了都 ...
使用Java实现登陆WebQQ(带源码)
问题描述
Find the greatest product of five consecutive digits in the 1000-digit number.
73167176531330624919225119674426574742355349194934
96983520312774506326239578318016984801869478851843
85861560789112949495459501737958331952853208805511
12540698747158523863050715693290963295227443043557
66896648950445244523161731856403098711121722383113
62229893423380308135336276614282806444486645238749
30358907296290491560440772390713810515859307960866
70172427121883998797908792274921901699720888093776
65727333001053367881220235421809751254540594752243
52584907711670556013604839586446706324415722155397
53697817977846174064955149290862569321978468622482
83972241375657056057490261407972968652414535100474
82166370484403199890008895243450658541227588666881
16427171479924442928230863465674813919123162824586
17866458359124566529476545682848912883142607690042
24219022671055626321111109370544217506941658960408
07198403850962455444362981230987879927244284909188
84580156166097919133875499200524063689912560717606
05886116467109405077541002256983155200055935729725
71636269561882670428252483600823257530420752963450
得到连续的五个数的最大乘积
思考:
每当我们得到当前五个数的乘积时,当挪动到下一个数,我们可以将保存的乘积乘以新的数除以之前五个数的第一个数。
如下
下标:0 1 2 3 4 5 6
数值:1 2 3 4 5 6 7
前五个数的乘积 result = 1*2*3*4*5
乘积中的第一个数first = 1
则求新的五个数的乘积 newResutl = result*6/first;
当然,实际运算时,我们还可以判断当前result和first是否为0
通过这样的运算,效率提高了很多~
自己逐步优化,写了四个方法
如下:
运算结果如下:
40824 count_for1:4975
40824 count_for2:2495
40824 count_for2:2305
40824 count_for2:820
效率提高的不是一般的多啊~
Find the greatest product of five consecutive digits in the 1000-digit number.
73167176531330624919225119674426574742355349194934
96983520312774506326239578318016984801869478851843
85861560789112949495459501737958331952853208805511
12540698747158523863050715693290963295227443043557
66896648950445244523161731856403098711121722383113
62229893423380308135336276614282806444486645238749
30358907296290491560440772390713810515859307960866
70172427121883998797908792274921901699720888093776
65727333001053367881220235421809751254540594752243
52584907711670556013604839586446706324415722155397
53697817977846174064955149290862569321978468622482
83972241375657056057490261407972968652414535100474
82166370484403199890008895243450658541227588666881
16427171479924442928230863465674813919123162824586
17866458359124566529476545682848912883142607690042
24219022671055626321111109370544217506941658960408
07198403850962455444362981230987879927244284909188
84580156166097919133875499200524063689912560717606
05886116467109405077541002256983155200055935729725
71636269561882670428252483600823257530420752963450
得到连续的五个数的最大乘积
思考:
每当我们得到当前五个数的乘积时,当挪动到下一个数,我们可以将保存的乘积乘以新的数除以之前五个数的第一个数。
如下
下标:0 1 2 3 4 5 6
数值:1 2 3 4 5 6 7
前五个数的乘积 result = 1*2*3*4*5
乘积中的第一个数first = 1
则求新的五个数的乘积 newResutl = result*6/first;
当然,实际运算时,我们还可以判断当前result和first是否为0
通过这样的运算,效率提高了很多~
自己逐步优化,写了四个方法
如下:
public static int find_five_consecutive1() { int result = 1; int max = 0; String str = read(); int begin = 0; int end = str.length(); int step = 5; for (int i = begin; i < end - step; i++) { result = 1; for (int j = 0; j < step; j++) { result = result * Integer.parseInt(str.charAt(i + j) + ""); count_for1++; } if (result > max) { max = result; } } return max; } public static int find_five_consecutive2() { int result = 1; int max = 0; String str = read(); int begin = 0; int end = str.length(); int step = 5; for (int i = begin; i < end - step; i++) { result = 1; for (int j = 0; j < step; j++) { if (str.charAt(i + j) == '0') { i = i + step + step - j; break; } else { int number = Integer.parseInt(str.charAt(i + j) + ""); result = result * number; count_for2++; } } if (result > max) { max = result; } } return max; } public static int find_five_consecutive3() { int result = 0; String str = read(); int step = 5; for (int i = 0; i < str.length(); i++) { if (str.charAt(i) == '0') { i = i + 5; count_for3++; } else { int multi = 1; for (int j = 0; j < step; j++) { count_for3++; char c = str.charAt(i + j); if (c == '0') { i = i + j + step; break; } else { multi *= Integer.valueOf(c + ""); if (multi > result) { result = multi; } } } } } return result; } public static int find_five_consecutive4() { int result = 1; int max = 1; String str = read(); int step = 5; int first = Integer.valueOf(str.charAt(0) + ""); for (int i = 0; i < step; i++) { count_for4++; char c = str.charAt(i); result *= Integer.valueOf(c + ""); } max = result; for (int i = 5; i < str.length(); i++) { if (result == 0) { // 重新计算 result = 1; first = Integer.valueOf(str.charAt(i) + ""); for (int j = 0; j < step; j++) { count_for4++; result *= Integer.valueOf(str.charAt(i + j) + ""); } if(result>max){ max = result; } i = i+step-1; } else{ count_for4++; if(str.charAt(i)=='0'){ result = 0; i = i+4; continue; }else{ result = (result*Integer.valueOf(str.charAt(i)+""))/first; first = Integer.valueOf(str.charAt(i-4)+""); if(result>max){ max = result; } } } } return max; }
运算结果如下:
40824 count_for1:4975
40824 count_for2:2495
40824 count_for2:2305
40824 count_for2:820
效率提高的不是一般的多啊~
发表评论
-
Problem 52
2011-09-07 19:37 880问题描述: It can be seen that th ... -
Problem 51
2011-09-06 19:46 966问题描述: By replacing the ... -
Problem 50
2011-09-03 14:53 921问题描述: The prime 41, can b ... -
Problem 49
2011-08-28 15:34 918问题描述: The arithmetic seq ... -
Problem 47
2011-08-27 16:10 548问题描述: The first two co ... -
Problem 46
2011-08-26 18:08 583问题描述: It was proposed by Chr ... -
Problem 45
2011-08-25 18:24 953问题描述: Triangle, pentagona ... -
Problem43
2011-08-24 16:32 893问题描述: The number, 1406357289 ... -
Problem 42
2011-08-23 09:18 859问题描述: The nth term of the se ... -
Problem 41
2011-08-19 15:08 718问题描述: We shall say that an n ... -
Problem 40
2011-08-18 14:27 785算法描述: An irrational decimal ... -
Problem 39
2011-08-17 15:28 871问题描述: If p is the perimeter ... -
Problem 38
2011-08-17 15:27 762问题描述: Take the number 192 an ... -
Problem 37
2011-08-17 15:26 757问题描述: The number 3797 has an ... -
Problem 36
2011-08-17 15:23 819问题描述: The decimal number, 58 ... -
Problem 35
2011-08-17 15:22 724问题描述: The number, 197, is ca ... -
Problem 34
2011-08-17 15:20 796问题描述: 145 is a curious numbe ... -
Problem 33
2011-08-17 15:18 768问题描述: The fraction 49/98 is ... -
Problem 32
2011-08-17 15:17 895问题描述: We shall say that an n ... -
Problem 30
2011-08-17 15:11 496问题描述: Surprisingly there ...
相关推荐
3. **D2:问题描述分析** - 使用多次“为什么”分析来组织关于问题症状的信息,并形成问题描述。 4. **D3:遏制措施** - 实施临时验证措施,防止问题症状到达客户手中。 5. **D4:根本原因分析** - 通过系统化的方法...
随着全球汽车行业对质量标准的不断追求,德国汽车工业协会(VDA)质量管理中心(QMC)发布了《VDA Band 8D - 8个学科的问题解决2018-en.pdf》这份内部使用文档,为汽车零部件供应商ZF Friedrichshafen AG提供了一套...
4. **测试支持**:Spring 2.5增加了更多关于单元测试和集成测试的支持,使得开发者可以在编写测试代码时更加方便地模拟环境和依赖关系。 5. **性能优化**:Spring 2.5在性能上也有所提升,通过对内部机制的优化,...
在这个压缩包文件中,"Flow_Shop_Scheduling_Problem.rar"包含了关于如何应用改进蛙跳算法(Improved Frog Leaping Algorithm, IFLA)解决流水车间调度问题的研究资料。蛙跳算法是一种模拟生物界的自然选择过程,...
C++14是C++语言的一个重要版本,它在C++11的基础上进一步扩展和改进了语言特性,引入了包括通用lambda表达式、变量模板、二进制数字面量、自动类型推断增强等新特性,提升了代码的简洁性和可读性。 本书共1400多页...
- **epoll (Linux 2.6+)**:Linux内核中引入的改进型I/O多路复用接口,显著提高了性能。 - **Polyakov's kevent (Linux 2.6+)**:基于FreeBSD kqueue的实现,用于Linux系统。 - **Drepper's New Network ...
欧拉方法,尤其是改进欧拉法,是求解初值问题(Initial Value Problem,IVP)中常微分方程的一种数值方法。在MATLAB中实现这些方法,可以方便地对复杂动态系统进行模拟和分析。 标题中的“基于Matlab实现改进欧拉法...
在本文中,作者提出了一种改进的混合遗传算法(Hybrid Genetic Algorithm, HGA)来解决多约束0-1背包问题(Multiconstrained 0-1 Knapsack Problem, MKP)。MKP是一个著名的NP完全组合优化问题,其定义如下: 目标...
在本章中,我们探讨了类的设计原则,特别是关于类成员的作用域。C++中的类成员可以是公共的(public)、受保护的(protected)或私有的(private)。这些访问修饰符定义了类成员对外界的可见性。 - **公共成员**:...
《解决问题的8个步骤》(8-Disciplines of Problem Solving)是一种系统化的问题解决方法,最初由福特汽车公司开发,并在财务管理类工作中广泛应用。8-D方法通过一系列有序的步骤,帮助团队深入分析问题,找出根本...
- **Polyakov's kevent(Linux 2.6+)**:基于FreeBSD的kqueue进行了改进,用于Linux环境。 - **Drepper's New Network Interface(Linux 2.6+)**:一种新的网络接口提案,旨在进一步优化Linux下的网络性能。 - ...
旅行商问题(Traveling Salesman Problem,TSP)是组合优化领域最著名的问题之一。该问题的目标是在一组城市之间找到一条最短的可能路径,每个城市只访问一次,并最终回到出发的城市。这个问题不仅在数学上具有挑战...
施泰因尔树问题(Steiner Tree Problem),作为图论中的一个重要问题,主要研究如何在一张带权图中找到一个连接所有指定顶点的最小权重树,并允许该树包含额外的顶点(称为施泰因尔顶点)。这个问题在多个领域都有...
在多路径选择问题中,如旅行商问题(Traveling Salesman Problem, TSP)、车辆路径问题(Vehicle Routing Problem, VRP)等,蚁群算法表现出了强大的求解能力。 标题中的"改进蚁群"是指对原始蚁群算法的优化和改进...
TSP(Traveling Salesman Problem,旅行商问题)是计算机科学与运筹学领域中的一个重要问题,它涉及寻找一条穿越所有指定地点恰好一次,并最终返回出发点的最短路径。随着地点数量的增加,TSP问题的解决方案数量呈...
在计算机科学和图论领域,最短路径问题(The Shortest Path Problem)是研究如何找到两个节点间路径长度最短的问题。这个问题不仅理论意义重大,在实际应用中也非常广泛,如网络路由、物流配送、城市规划等场景都有...
《三维装箱问题及其解决方案——遗传算法与模拟退火》 在物流、仓储及制造业等领域,如何高效地利用有限的空间来装载物品是一个...未来,随着计算能力的提升和算法的不断改进,相信在解决这类问题上会有更多的突破。