主题:求助一个算法题,希望高手相助
why456
[专家分:0] 发布于 2006-10-10 21:36:00
要求写一个算法,生成一个数组,数组中的元素满足:a[0]=0,a[1]=1,a[2]=8,……即a[i]=i^3。但是算法中不能出现乘法,只能通过加法实现,怎么做啊?[em18]
回复列表 (共6个回复)
沙发
why456 [专家分:0] 发布于 2006-10-10 21:39:00
老师说初中生都会做,郁闷死偶了。
板凳
Fanyucai [专家分:400] 发布于 2006-10-10 22:12:00
#include<iostream.h>
void main()
{
int i,j,k;
int n=5;
long a[10]={0};
for(k=0;k<10;k++)
{
for(i=0;i<k;i++)
{
for(j=0;j<k;j++)
{
a[k]+=k; //实现k^3附给a[k];
}
}
}
for(i=0;i<10;i++)
{
cout<<a[i]<<endl;
}
}
运行环境:创天中文C++6.0,WinXP操作系统
想到就的确是中学问题,只是你一时没有想到而已;[em1]
3 楼
rickone [专家分:15390] 发布于 2006-10-10 22:12:00
(x+1)^3-x^3
=x^3+3x^2+3x+1-x^3
=3x(x+1)+1
不用乘法似乎不太可取,由这个关系,这样编程:
int a[256];
a[0]=0;
n=10;
for(int i=1;i<=n;++i)
{
a[i]=a[i-1]+3*(i-1)*i+1;
}
算算,用了两次乘法,还不如直接i*i*i,所以不可取;P
设b[i]=3*i*i,a[i]=i*i*i
所以
a[i]=a[i-1]+b[i-1]+i+i+i-2
再算b[i]-b[i-1]
=3[i^2-(i-1)^2]
=3[i^2-i^2+2i-1]
=3(2i-1)
=6i-3
所以程序就这样写咯:
int a[256],b[256],n;
a[0]=b[0]=0;
scanf("%d",&n);
for(int i=1;i<=n;++i)
{
b[i]=b[i-1]+i+i+i+i+i+i-3;
a[i]=a[i-1]+b[i-1]+i+i+i-2;
}
printf("a[%d]=%d\n",n,a[n]);
;)
4 楼
why456 [专家分:0] 发布于 2006-10-10 22:43:00
太感谢两位啦,谢谢![em1]
5 楼
雨523 [专家分:200] 发布于 2006-10-11 10:26:00
循环加很多次,而不用乘法,这玩的是啥?
6 楼
smilefox [专家分:0] 发布于 2006-10-13 07:37:00
玩的就是心跳啊。。。。就是不让你好好写。。
我来回复