- 更多C语言的练习题可以点这个链接——C语言经典练习
1. 题目
- 题目的链接在这里——尼科彻斯定理
1.1 题目描述
1.2 输入描述
- 输入一个int整数
1.3 输出描述
- 输出分解后的结果
1.4 示例
2. 分析思路
- 这道题的关键在于知道规律后,能够找到第n个数据立方的起始奇数,从这个起始奇数开始,组成连续的n个奇数项之和的表达式即可。
- 比如: 3^3 的起始奇数是7,则{7,9,11}3个奇数求和表达式 7+9+11。
- 而起始奇数有个规则: m^3 的起始奇数值等于 m*(m-1)+1
- 怎么得到这个规律的呢:
- 首先1^3对应1 即1*0+1
- 2^3对应 3+5 即1*2+1
- 3^3对应 7+9+11 即2*3+1
- 以此类推……
- 另一种找到规律的思路是这样的
- 奇数起始项规律:首先所有奇数项构成一个差值为2的等差数列,13579.其次,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 m;
while (scanf("%d", &m) != EOF)
{
int start = m * (m - 1) + 1;//找到打印的起始位置
for (int i = 0; i < m - 1; i++)
{
printf("%d+", start);
start += 2;
}
printf("%d\n", start);//打印最后一个数
}
return 0;
}
- 这里看到如果m为6的话
- 最后要求输出的是31+33+35+37+39+41
- 那么我们可以找一下打印的规律
- 即可以把打印的数字与+分为一组打印,然后最后的数字单独打印即可
- 运行结果:
最后,
恭喜你又遥遥领先了别人!!