Time Limit: 1000 mSec Memory Limit : 32768 KB
Problem Description
Input
第一行一个正整数T,表示数据组数。 接下来T行,每行一个正整数n。 T<=20,n<=2015000000。
Output
对于每组数据,输出一行f(n)。
Sample Input
2
1
20150001
Sample Output
2015
20152014
Source
FOJ有奖月赛-2015年11月
思路:f(20150002)=f(f(20150002-2015))=f(20150001)=20152014; 看完这个大牛
的代码,我感觉回到了高中的时候,很崩溃。数学的水很深啊 ! 话不多说看上面的推导
公式,会发现只要大于20150001就会输出20152014,否则输出n+2014。一般的递归
会出现内存错误,即使你用ll型也一样。(以后在遇见这中题一定仔细找规律)。
#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
int main()
{
int t,n;
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
if(n<20150001)
printf("%d\n",n+2014);
else
printf("20152014\n");
}
return 0;
}