题解 | 送分题

送分题

https://www.nowcoder.com/practice/019393d5c13e47d89d7371ea4f7f9ed4

#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

全部评论

相关推荐

11-04 10:30
已编辑
门头沟学院 研发工程师
开心小狗🐶:“直接说答案”
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

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