#include<iostream>
using namespace std;
long long f(long long n) {
    if (n < 20180001) return n + 2017;
    return f(f(n - 2018));
}
int main() {
    long long n;
    cin >> n;
    if(n>=20180001) cout << 20182017;
    else cout << f(n) << endl;
    return 0;
}

代码实现没得说,很简单,主要的,我们来梳理一下题目自身的逻辑

当n<20180001,结论很平凡,不再赘述,但当n>=20180001,就变得截然不同,n这个数会不断向深递归,每次减2018,直到n<20180001,n往回加上2017,等价于n减去一,如果n依旧大于20180001,重复操作,需要注意,最后一次的操作为f(f(n-2018)),而最终,f(n-2018)一定是等于20180000,所以答案为20182017