原题链接: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、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复