题意:

三角形数、五边形数和六角形数分别由以下公式给出:

     
三角形数 Tn=n(n+1)/2 1, 3, 6, 10, 15, …
五边形数 Pn=n(3n−1)/2 1, 5, 12, 22, 35, …
六边形数 Hn=n(2n−1) 1, 6, 15, 28, 45, …

可以验证,T285 = P165 = H143 = 40755。

找出下一个同时是三角形数、五边形数和六角形数的数。

思路:因为六角形数增长速度最快,所以去枚举六角形数,然后二分一下这个数是否在三角形数和五角形数之中出现过。利用函数指针可以降低代码长度,免去了在二分中增加判断是从三角形数中查找还是五角形数中查找这一操作。

函数指针链接:****Here!


  1. /*************************************************************************
  2. > File Name: euler045.c
  3. > Author: WArobot
  4. > Blog: http://www.cnblogs.com/WArobot/
  5. > Created Time: 2017年06月27日 星期二 14时09分07秒
  6. ************************************************************************/
  7. #include <stdio.h>
  8. #include <inttypes.h>
  9. typedef int64_t (*calcFunc)(int64_t); // 声明函数指针降低代码长度
  10. // 声明了一个名为calcFunc,返回值为int64_t,函数参数列表为一个int64_t形参的指针变量
  11. int64_t Hexagonal (int64_t n) {
  12. return n * (2 * n - 1) ;
  13. }
  14. int64_t Triangle (int64_t n) {
  15. return (n * (n + 1)) / 2;
  16. }
  17. int64_t Pentagonal (int64_t n) {
  18. return (n *(3 * n - 1)) / 2;
  19. }
  20. bool Binary_Serch (int64_t n , calcFunc f) { // 二分查找一下n
  21. int64_t l = 1 , r = n , mid;
  22. while (l < r) {
  23. mid = (l + r) >> 1;
  24. if (f(mid) < n) l = mid + 1;
  25. else r = mid;
  26. }
  27. return f(r) == n;
  28. }
  29. int32_t main() {
  30. int64_t i = 143 , t;
  31. while (cnt) {
  32. t = Hexagonal((++i));
  33. if (!Binary_Serch(t , Triangle)) continue;
  34. if (!Binary_Serch(t , Pentagonal)) continue;
  35. printf("%"PRId64"\n",t);
  36. break;
  37. }
  38. return 0;
  39. }

Project Euler 45 Triangular, pentagonal, and hexagonal( 二分 + 函数指针 )的更多相关文章

  1. Project Euler 363 Bézier Curves(几何+二分)

    题目链接: https://projecteuler.net/problem=363 题目: A cubic Bézier curve is defined by four points: \(P_0 ...

  2. 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 ...

  3. Python练习题 040:Project Euler 012:有超过500个因子的三角形数

    本题来自 Project Euler 第12题:https://projecteuler.net/problem=12 # Project Euler: Problem 12: Highly divi ...

  4. Python练习题 039:Project Euler 011:网格中4个数字的最大乘积

    本题来自 Project Euler 第11题:https://projecteuler.net/problem=11 # Project Euler: Problem 10: Largest pro ...

  5. [project euler] program 4

    上一次接触 project euler 还是2011年的事情,做了前三道题,后来被第四题卡住了,前面几题的代码也没有保留下来. 今天试着暴力破解了一下,代码如下: (我大概是第 172,719 个解出 ...

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

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

  7. Project Euler 9

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

  8. project euler 169

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

  9. 【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 × ...

随机推荐

  1. java.lang.Object 方法解析

    1.clone() a.是一个native方法,效率比非native高 b.是protected 修饰的,要用他必须继承object,默认都是继承object的 c.返回是一个object 对象,需要 ...

  2. 【ACM】hdu_1096_A+BVIII_201307261748

    A+B for Input-Output Practice (VIII)Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32 ...

  3. 跟我学Java多线程——线程池与堵塞队列

    前言 上一篇文章中我们将ThreadPoolExecutor进行了深入的学习和介绍,实际上我们在项目中应用的时候非常少有直接应用ThreadPoolExecutor来创建线程池的.在jdk的api中有 ...

  4. 汉澳sinox2014x64server已经能够下载

    大家快去下载,用迅雷快速下载 下载地址 ftp://sinox.3322.org/sinox2014x64server.img 已经能够下载 ftp://sinox.3322.org/sinox201 ...

  5. REST当道,NO MVC

    前世今生 B/S开发经历了几个时代,如今已经是后MVC时期了. MVC体现了分层和解耦合的概念.从功能和理念上都做出过巨大贡献,使Java B/S开发在面对大型项目时从容不迫,说成是上个十年Java ...

  6. 随机获取一个集合(List, Set)中的元素,随机获取一个Map中的key或value

    利用Java提供的Random类.从List或Set中随机取出一个元素,从Map中随机获取一个key或value. 因为Set没有提供get(int index)方法,仅仅能先获取一个随机数后.利用一 ...

  7. QUERY_REWRITE_INTEGRITY

    QUERY_REWRITE_INTEGRITY Property Description Parameter type String Syntax QUERY_REWRITE_INTEGRITY = ...

  8. leetcode解题文件夹

    点击打开链接点击打开链接点击打开链接參考文献:http://blog.csdn.net/lanxu_yy/article/details/17848219 只是本文准备用超链接的方式连接到对应解答页面 ...

  9. xcode Could not launch "" ; has denied the launch request

    xcode Could not launch "" ;  “”“ has denied the launch request  (注意,这种方式不能调试) 1.编辑scheme 2 ...

  10. codetemplate

    <?xml version="1.0" encoding="UTF-8" standalone="no"?><templa ...