参考代码:

/**
 * 尼科彻斯定理:任何一个整数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分

0 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论