OJ链接——尼科彻斯定理

1. 题目

1.1 题目描述

  • 验证尼科斯彻定理,即:任何一个整数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个连续奇数之和的形式输出。
  • 数据范围:1≤m≤100
  • 进阶:时间复杂度:O(m) ,空间复杂度:O(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
  • 那么我们可以找一下打印的规律
  • 即可以把打印的数字与+分为一组打印,然后最后的数字单独打印即可
  • 运行结果:

在这里插入图片描述

在这里插入图片描述

最后,
恭喜你又遥遥领先了别人!!
在这里插入图片描述

  • 9
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

看落日的YT

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值