欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 汽车 > 时评 > C语言初阶牛客网刷题——HJ76 尼科彻斯定理【难度:简单】

C语言初阶牛客网刷题——HJ76 尼科彻斯定理【难度:简单】

2025/10/31 9:58:31 来源:https://blog.csdn.net/graceyun/article/details/145304770  浏览:    关键词:C语言初阶牛客网刷题——HJ76 尼科彻斯定理【难度:简单】

1.题目描述——HJ76 尼科彻斯定理

HJ76 尼科彻斯定理
验证尼科彻斯定理,即:任何一个整数 m 的立方都可以写成 m 个连续奇数之和。例如:

1^3=1
2^3=3+5
3^3=7+9+11
4^3=13+15+17+19

输入一个正整数 m(m≤100) ,将 m 的立方写成 m 个连续奇数之和的形式输出。
注意:本题含有多组输入数据。
输入描述:输入一个int整数
输出描述:输出分解后的string

2. 思路

3^3 的起始奇数是 7 , 则 {7, 9, 11} 3个奇数求和表达式 7 + 9 + 11
观察每个起始奇数的个规则: m^3 的起始奇数值等于 m * (m - 1) + 1

奇数起始项规律:
首先所有奇数项构成一个差值为2的等差数列, 1 3 5 7 9 …
其次,1的起始奇数是第1个等差数列项,2的起始奇数是第2个等差数列项,3的起始奇数是第4个等差数列项…
形成规律: 1 2 4 7…,而他们的差值分别是1 2 3 4 5…,所以第n项就是一个从1开始到n-1的等差数列之和+1

因此当有了需求m的立方,首先计算他的第一个奇数项是总体的第几个 。
等差数列求和公式 Sn=n(a1+an)/2 m * (m - 1) / 2
等差数列第n项公式 an=a1+(n-1)d 1 + ((m * (m - 1) / 2) + 1 - 1) * 2
最终得到m的立方的表达式起始奇数: m * (m - 1) + 1

3.代码实现

#include <stdio.h>int main() {int a;while (scanf("%d", &a) != EOF) { int start = a * (a - 1) + 1;//找到对应m^3的起始奇数char buf[10240] = {0};sprintf(buf, "%d", start);//与printf用法类似,格式化字符串但是不用于打印而是放到一个buf中for (int i = 1; i <a ; i++) //先将起始奇数转换成为字符串存入buf中{//然后将紧随随后的m-1个奇数数字转换为字符串,按照指定格式放入buf中
//%s+%d, 要求先有一个字符串,然后是+符号,然后是个数字的格式,对应是buf原先的数据,和奇数sprintf(buf, "%s+%d", buf, start+=2);}printf("%s\n", buf);}return 0;
}

在这里插入图片描述

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词