描述
验证尼科彻斯定理,即:任何一个整数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)
输入描述:
输入一个int整数
输出描述:
输出分解后的string
示例1
输入:
6
输出:
31+33+35+37+39+41
解题思路:
这道题比较简单,直接按照进阶版来写,满足时间复杂度和空间复杂度的要求
1^3=1
2^3=3+5
3^3=7+9+11
4^3=13+15+17+19
……
通过观察上述例子,可以发现等号右边的数都是从中间数散开的,而这个中间数就是m²,比如2,中间数就是2²=4,从4开始左右散开,分别是3 (4) 5;再比如4,中间数就是4²=16,从16开始左右散开,分别是13 15 (16) 17 19;再比如3,中间数就是3²=9,从9开始左右散开,分别是7 9 11;要注意,如果m是偶数,那中间数不会出现,如果m是奇数,中间数就会出现。
为了满足时间复杂度为O(m)的要求,找了一下等号右边最先出现的数,之后的数就是在前一个数的基础上+2就行,循环次数也就是m。
按照规律可得:等号右边第一个数为:m²-m+1
了解以上,就可以写代码了
#include <stdio.h>
#include <math.h>
int main()
{
int m,temp;
scanf("%d",&m);
temp=pow(m,2)-m+1;
while(m>1)
{
printf("%d+",temp);
temp+=2;
m--;
}
printf("%d\n",temp);
return 0;
}