蒟蒻求助

P2669 [NOIP2015 普及组] 金币

su180 @ 2023-10-31 21:45:16

大佬们,我这么写输入6可以,1000就不对了,不知道为什么,球球了

#include<stdio.h>
int main ()
{
    int k,n,s=0,c=0,i,x;
    scanf("%d",&k);
    for(n=1;n<=1e7;n++){
        s+=n*n;
        if(s>=k){
            break;
        }
    }
    for(i=1;i<=(n-1);i++){
        c+=i*i;
    }
    x=n*(n-1)/2;
    c+=(k-x)*n;
    printf("%d",c);
    return 0;
}

by chillLee @ 2023-10-31 22:24:40

您的算法有问题。
具体而言,第一个 for(n=1;n<=1000;n++) 中,您的目的应该是求得能够完全取得 i^2 枚金币的最大天数,然后剩余取不到的天数在取剩下的。
但是 s+=n*n 显然是金币数和天数弄混了。 所以将 s+=n*n 更改为 s+=n 即可通过。

有用的话点个关注?


|