问题标题: 酷町堂:1040

0
0

1
已采纳
张睿杰
张睿杰
初级天翼
初级天翼
定义x,d=0,he=0,n=1;
输入x
    while(d+n<=x)
    {
        d=d+n;
        he=he+n*n;
        n++;
    }
    he=he+(x-d)*n;
输出he

 

0
王子轩
王子轩
新手光能
新手光能

定义x,d=0,he=0,n=1;

 

输入x;

 

while(d+n<=x)

 

{

 

d=d+n;

 

he=he+n*n;

 

n++;

 

}

 

he=he+(x-d)*n;

 

输出he和endl;

0
0
朱宇辰
朱宇辰
初级守护
初级守护

关键代码如下:

n=(sqrt(1+8*k)-1)/2;
ans=n*(n+1)*(2*n+1)/6;
k-=n*(n+1)/2;
ans+=k*(n+1);

k为存钱的天数

题中将,每1+2+…+n算为第i个循环,n就是表示这种循环的数量,因为这种整循环,每个就是n²。然后累加这些整循环

运用了1²+2²+…+n²=n*(n+1)*(2*n+1)/6的一个公式,求出整循环存入的钱数

用总天数减去整循环的天数,这里利用了1+2+…n=n*(n+1)/2。

然后剩余的天数因为不满整循环,所以只能单独计算。最后的结果再加上第(n+1)个非整循环存的钱数。

例如:11

11代入第一个式子可以求出n=4吗,也就是有4个整循环,1+2+3+4=10<11

第二个式子可以求出这4个整循环的钱数,也就是1+4+9+16=30同样也是4*5*9/6

1=1 4=2+2=2² 9=3+3+3=3² 16=4+4+4+4=4²

第三个式子可以得出除了这四个整循环外的天数也就是11-10=1

10=1+2+3+4

第四个式子得出这整循环外存的钱1*(4+1)=5

总共就应该是30+5=35

一共存了35元

同样的:1+2+2+3+3+3+4+4+4+4+5=35.

朱宇辰在2018-02-09 19:38:34追加了内容

上面的是非循环,做法,同时也有循环做法。但是循环做法更耗时间。而数学方法更难写,需要一些公式的运用

循环做法

int i=1;
while(a+i)<=k){
        a+=i;
        ans+=pow(a,2);
        i++;
    }
    ans=ans+(k-a)*i;
    

循环i,从1开始,直到不满足条件为止

如果累加后的天数小于总天数,说明在整循环内部,累加最终钱数。

然后相减得到非循环天数,再算出,

两者相加则为结果

 

0
褚福磊
褚福磊
新手光能
新手光能

核心代码:

int i,d,money=0,m=0;
    cin>>d;
    for(i=1;m<d;i++){
        m=m+i;
        money=money+i*i;
    }
    cout<<money-(m-d)*(i-1);

搞定

我要回答