任何一个自然数的立方等于连续奇数之和

这个题目改怎麼写~~~要写的简单点的我只学过ifwhilefor这些怎么写比较容易理解~~~验证上面结论:如,1^3=1;2^3=3+5;3^3=7+9+11要求:程序对... 这个 题目改怎麼写~~~
要写的简单点的 我只学过 if while for 这些
怎么写比较容易理解~~~
验证上面结论:如,1^3=1;2^3=3+5;3^3=7+9+11
要求:程序对每个输入的自然数计算并输出相应的连续奇数

不要在难啊 我只会简单的 while for if 这种级别的~~~~
展开
 我来答
栩箭
2009-10-31 · TA获得超过5310个赞
知道大有可为答主
回答量:3036
采纳率:0%
帮助的人:1627万
展开全部
VC6.0下测试通过

#include <stdio.h>
typedef unsigned char U8;
typedef unsigned short U16;
typedef unsigned long U32;
U16 m,n;

int Analyse ( U8 x )
{
U32 tmp;
U32 xxx;

xxx = x * x * x;
for ( U32 i = 0; i < 0xFFFF; i++ )
for ( U32 j = i + 1; j < 0xFFFF; j++ )
{
tmp = j * j - i * i;
if ( tmp == xxx )
{
m = (U16)i;
n = (U16)( j - 1 );
return 1;
}
if ( tmp > xxx )
if ( j == i + 1 )
return 0;
else
break;
}
return 0;
}

int ShowRes ( U8 x )
{
int tmp;
U32 sum;

sum = 0;
tmp = Analyse ( x );
if ( tmp == 0 )
printf ( "No result.\n" );
else
{
printf ( "%d^3 = ", x );
for ( U32 i = m; i <= n; i++ )
{
printf ( "%d+", 2*i+1 );
sum += 2 * i + 1;
}
printf ( "%c \n", 8 );
if ( sum != (U32)( x * x * x ) )
printf ( "error!\n" );
}
return 0;
}

int main(void)
{
for ( U32 i = 1; i < 10; i++ )
ShowRes ( i );
return 0;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2009-11-01
展开全部
DEV-C++通过
#include <iostream>
using namespace std;
int main()
{
unsigned int x=0,num=1,i;
unsigned long N=0,L=0;
cin >>x;
N=x*x*x;
if(N==0){cout <<"+0=0" <<endl;system("pause");return 0;}
while(L!=N)
{
L=0;
for(i=num;i<=(N/2+1);i+=2)
{
L+=i;
if(L==N) {break;}
}
if(L!=N) num+=2;
}

for(int n=num;n<=i;n+=2)
cout <<"+" <<n ;
cout <<"=" <<L <<endl;
system("pause");
return 0;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
huifeng00
2009-11-01 · TA获得超过5233个赞
知道大有可为答主
回答量:808
采纳率:0%
帮助的人:694万
展开全部
不知道楼主注意没:
1^3=1^2-0^2=(1-0)*(1+0)=1*1;
2^3=3^2-1^2=(3-1)*(3+1)=2*4;
3^3=6^2-3^2=(6-3)*(6+3)=3*9;
因此我只要找出你输入的自然数两个同号的因子a,b。
然后利用x-y=a;x+y=b;求出x,y.就可以了
程序如下:
#include <stdio.h>
#include <math.h>

int main()
{
int n;
scanf("%d",&n);
int data=(int)sqrt(n);
int a,b,x,y,i,j;
for(i=1;i<=data;i++)
{
if(n%i==0)
{
a=i;
b=n/i;
if(((a+b)&1)==0)
{
x=(a+b)/2;
y=(b-a)/2;
break;
}
}
}
int begin=2*y+1;
int end=2*x-1;
printf("%d=",n);
for(j=begin;j<end;j+=2)
{
printf("%d+",j);
}
printf("%d\n",end);
return 0;
}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
fubing315
2009-10-31 · TA获得超过333个赞
知道答主
回答量:237
采纳率:0%
帮助的人:0
展开全部
这个题目什么意思看不明白
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式