验证尼科彻斯定理,即:任何一个整数m的立方都可以写成m个连续奇数之和。
例如:
1^3=1
2^3=3+5
3^3=7+9+11
4^3=13+15+17+19
输入:
整数m(取值范围:1~100)
输出:
尼科彻斯定理成立,输出m个连续奇数(格式:“7+9+11”);否则输出-1
//思路从奇数的1的开始往上累加,大于m*m*m 则从下一个奇数开始累加。累加是要计数奇数的个数 累加的上限为m*m*m
<pre name="code" class="cpp">#include<iostream>
#include<cstdlib>
#include<cstdio>
using namespace std;
//思路从奇数的1的开始往上累加,大于m*m*m 则从下一个奇数开始累加。累加是要计数奇数的个数 累加的上限为m*m*m
void fun(int m)
{
int m3=m*m*m;
int start,end,sum;// start为奇数的起始,end 为奇数的末尾,sum为奇数和
bool flag=false;
for(int i=1;i<=m3;i=i+2)
{
start=i;
sum=0;
int count=0;
for(int j=start;j<=m3;j=j+2)
{
sum+=j;
count++;
if(sum==m3&&count==m)//注意条件是m的立方都可以写成m个连续奇数之和 需要一个计数
{
end=j;
flag=true;
break;
}
else if(sum>m3)
{
flag=false;
break;
}
}
if(flag==true)
{
break;
}
}
if(flag==true)
{
for(int i=start;i<end;i=i+2)
{
cout<<i<<'+';
}
cout<<end<<endl;//打印最后一个数
}
else
{
cout<<-1<<endl;
}
}
int main()
{
int m;
cin>>m;
fun(m);
return 0;
}