回 帖 发 新 帖 刷新版面

主题:求助一个算法题,希望高手相助

要求写一个算法,生成一个数组,数组中的元素满足:a[0]=0,a[1]=1,a[2]=8,……即a[i]=i^3。但是算法中不能出现乘法,只能通过加法实现,怎么做啊?[em18]

回复列表 (共6个回复)

沙发

老师说初中生都会做,郁闷死偶了。

板凳

#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 楼

(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 楼


太感谢两位啦,谢谢![em1]

5 楼

循环加很多次,而不用乘法,这玩的是啥?

6 楼

玩的就是心跳啊。。。。就是不让你好好写。。

我来回复

您尚未登录,请登录后再回复。点此登录或注册