原题链接:C语言训练-尼科彻斯定理
参考代码:
/** * 尼科彻斯定理:任何一个整数m的立方都可以写成m个连续奇数之和 * 示例:13*13*13=2197=157+159+161+163+165+167+169+171+173+175+177+179+181 * * 思路:连续的奇数就是公差为2的等差数列(来自:https://blog.dotcpp.com/a/90159) * * 假设x是首项,则m个连续奇数可表示如下(等差数列的前n项之和:Sn = 首项*项数 + 项数*(项数-1)/2*公差) * |————————————————————————————————————————————————————————————————————| * |第1项 x+0 前1项之和 x*1+0 | * |第2项 x+2 前2项之和 x*2+0+2 | * |第3项 x+4 前3项之和 x*3+0+2+4 | * |第4项 x+6 前4项之和 x*4+0+2+4+6 | * |第5项 x+8 前5项之和 x*5+0+2+4+6+8 | * |第m项 x+(m-1)*2 前m项之和 x*m+m*(m-1) | * * 由尼科彻斯定理知道,等差数列的前n项之和=项数的立方 * 也就是 m*m*m = x*m + m*(m-1) => x = m*m - m + 1 */ #include <stdio.h> #include <math.h> int InputNum() { int m; scanf("%d", &m); return m; } void Process(int m) { printf("%d*%d*%d=%.f=", m, m, m, pow(m, 3)); int x = m * m - m + 1; for (int i = 0; i < m; i++) { printf("%d", x); x = x + 2; if (i != m - 1) { printf("+"); } } } int main() { int m = InputNum(); Process(m); return 0; }
0.0分
0 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复