题解 | #[NOIP2015]金币#

[NOIP2015]金币

https://www.nowcoder.com/practice/8f71f5670e6a45118d24d13868a2da9e

#include <stdio.h>

int main() {
    int k, i = 0, sum = 0;
    int days;
    scanf("%d", &k);
    for (i = 1,days=0; days<k;i++)
    {
        days += i;
        sum += i * i;
    }
                                             //计算days天获得了sum个金币

    i--;
    if (days == k)                                //days恰好等于k的情况
        printf("%d", sum);
    else                                          //days>k的情况,往前扣金币
    {
        while (days-k!=0)
        {
            sum -= i;
            days--;
        }
        printf("%d", sum);
    }

}

虽然解法没那么好,但是你就说A了没。

把1、2+2、3+3+3、4+4+4+4分别当做一个周期,days只取每个周期末尾的那一天,并计算days天获取的金币

days取值只能是1,3,6,10…….。直到days第一次不小于k为止。

如果days恰好等于k,则直接输出金币总和,如果days大于k,多几天就退几天的金币。

全部评论

相关推荐

09-21 23:16
门头沟学院 Java
传奇逃兵王:招不起就别招,叽里咕噜说啥呢
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务