为什么只有40分?求助QAQ

P2669 [NOIP2015 普及组] 金币

chennuo2938 @ 2022-01-22 21:44:20

如下

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int z=0,x=1;
    int k;
    cin>>k;
    for(int i=1;i<=k;i+=x)
    {
        for(int j=1;j<=x;j++)
        {
            z+=x;
        }
        x++;
    }
    cout<<z;
    return 0;
}

by _Spectator_ @ 2022-01-22 22:16:22

@chennuo2938 这份代码连样例都过不了呢……

注意第一重循环不能每次加 x,否则会导致当最后不满一个周期时最后一个周期的金币不会被算进去。


by waauto @ 2022-01-23 17:40:51

最后一周期没算啊我的宝


by Wechis @ 2022-02-13 17:21:20

其实 用枚举大法

一切都那么简单

我们会发现,d表示接下来领取工资为n的天数,当d = n时……

n++
d = 0
正确代码如下
#include <iostream>
using namespace std;
int mon(int day){//day表示每位追随的天数
    int d = 0, n = 1, sum = 0;
    for(int i = 1; i <= day; i++){
        d++;
        sum += n;
        if(d == n){
            n++;
            d = 0;
        }
    }
    return sum;
} 
int main(){
    int k;
    cin >> k;
    cout << mon(k) << endl;
    return 0;
}

毫无疑问的

AC通过!!!

赶快回到题目里吧( 此为传送门


|