博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Project Euler 45 Triangular, pentagonal, and hexagonal( 二分 + 函数指针 )
阅读量:6162 次
发布时间:2019-06-21

本文共 1540 字,大约阅读时间需要 5 分钟。


题意:

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

     
三角形数 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。

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

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

函数指针链接:


/*************************************************************************    > File Name: euler045.c    > Author:    WArobot     > Blog:      http://www.cnblogs.com/WArobot/     > Created Time: 2017年06月27日 星期二 14时09分07秒 ************************************************************************/#include 
#include
typedef int64_t (*calcFunc)(int64_t); // 声明函数指针降低代码长度 // 声明了一个名为calcFunc,返回值为int64_t,函数参数列表为一个int64_t形参的指针变量int64_t Hexagonal (int64_t n) { return n * (2 * n - 1) ;}int64_t Triangle (int64_t n) { return (n * (n + 1)) / 2;}int64_t Pentagonal (int64_t n) { return (n *(3 * n - 1)) / 2;}bool Binary_Serch (int64_t n , calcFunc f) { // 二分查找一下n int64_t l = 1 , r = n , mid; while (l < r) { mid = (l + r) >> 1; if (f(mid) < n) l = mid + 1; else r = mid; } return f(r) == n;}int32_t main() { int64_t i = 143 , t; while (cnt) { t = Hexagonal((++i)); if (!Binary_Serch(t , Triangle)) continue; if (!Binary_Serch(t , Pentagonal)) continue; printf("%"PRId64"\n",t); break; } return 0;}

转载于:https://www.cnblogs.com/WArobot/p/7085428.html

你可能感兴趣的文章
MyEclipse 报错 Errors running builder 'JavaScript Validator' on project......
查看>>
Skip List——跳表,一个高效的索引技术
查看>>
Yii2单元测试初探
查看>>
五、字典
查看>>
前端js之JavaScript
查看>>
Log4J日志配置详解
查看>>
实验7 BindService模拟通信
查看>>
scanf
查看>>
Socket编程注意接收缓冲区大小
查看>>
SpringMVC初写(五)拦截器
查看>>
检测oracle数据库坏块的方法
查看>>
SQL server 安装教程
查看>>
Linux下ftp和ssh详解
查看>>
跨站脚本功攻击,xss,一个简单的例子让你知道什么是xss攻击
查看>>
js时间和时间戳之间如何转换(汇总)
查看>>
js插件---图片懒加载echo.js结合 Amaze UI ScrollSpy 使用
查看>>
java中string和int的相互转换
查看>>
P1666 前缀单词
查看>>
HTML.2文本
查看>>
Ubuntu unity安装Indicator-Multiload
查看>>