迪迦


私信TA

用户名:dotcpp0776032

访问量:566

签 名:

等  级
排  名 7115
经  验 1321
参赛次数 0
文章发表 25
年  龄 0
在职情况 学生
学  校
专  业

  自我简介:

参考代码:

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

  评论区

  • «
  • »