题目:http://ac.jobdu.com/contest.php?cid=1039
这些题目的做法都很类似,所以放在一起写,都是同类型的递推题。题目4、5、7递推式其实都是斐波那契数列:f(n)=f(n-1)+f(n-2),其中的初值不同。题目6的递推式为f(n)=f(n-1)+f(n-2)+...f(0),由些可得f(n - 1) = f(n - 2) + f(n -3) + ...+f(0);所以可得:f(n) = 2*f(n - 1);都可以通过迭代直接求得!!注意题目的数据范围,可能会超int范围。所以用long long int!
以下给出第4题 和第6题 的AC代码!第4题、第5题、第7题的代码类似,只要更改一下初值就可以了!
//第四题 源代码
#include <iostream>
#include <cstdio>
#include <string>
#include <cstring>
#include <cctype>
#include <cstdlib>
#include <string.h>
#include <algorithm>
#include <cmath>
using namespace std;
#define N 90
#define LL long long int
LL ans[N + 10];
void generate()
{
int i;
ans[0] = ans[1] = 1;
for(i = 2;i <= N;i++)
ans[i] = ans[i - 1] + ans[i - 2];
return;
}
int main()
{
int n;
generate();
while(scanf("%d",&n) == 1)
{
printf("%lld\n",ans[n]);//注意使用64位数
}
return 0;
}
//第六题源代码
#include <iostream>
#include <cstdio>
#include <string>
#include <cstring>
#include <cctype>
#include <cstdlib>
#include <string.h>
#include <algorithm>
#include <cmath>
using namespace std;
#define N 65
#define LL long long int
LL fib[N];
void generate()
{
int i;
fib[0] = fib[1] = 1;
for(i = 2;i <= 50;i++)
fib[i] = 2 *fib[i - 1];
}
int main()
{
int n;
generate();
while(scanf("%d",&n) == 1)
{
printf("%lld\n",fib[n]);//注意用64位
}
return 0;
}