nkpc1 Lucy的难题

来源:互联网 发布:mysql 默认端口号 编辑:程序博客网 时间:2024/05/18 03:09

对给定的f(n) 当 n>=50025002 的时候,f(n)=n-5;当 n<50025002 的时候,f(n)=f(f(n+2005)) 给定n,求出发f(n)

如果使用递归,则会栈溢出!!!

可以递归化循环:

用m表示f的层数,f(m,n)表示参数n嵌套了m层f,例如
f(3,n)=f(f(f(n)))
f(1,n)=f(n)
f(0,n)=n

//当 n>=50025002 的时候,f(n)=n-5;当 n<50025002 的时候,f(n)=f(f(n+2005))#include <iostream>#include <cstdio>using namespace std;int main(){int n,m;while(scanf("%d",&n)==1){m=1;while(m>0){if(n>=50025002){ n=n-5;m--; }else {n+=2005; m++;  }}printf("%d\n",n);}return 0;}