题目描述在数学中斐波那契数列F是这样定义的:F(n)=F(n-1)+F(n-2),F(0)=1,F(1)=1。现在我有另外一个序列G,G(n)=G(n-1)+G(n-2),G(0)=1,G(1)=t(t>=1)。 你的任务对于给定的i,G(i)和j输出G(j)。输入多组测试数据,对于每组测试数据包含三个正整数i,G(i),j。1 <= i,j <=20, G(i)<100000。输出对于每组数据,如果t存在输出对应的G(j)的值,否则输出-1。样例输入1 1 23 5 43 4 612 17801 19样例输出28-1516847
#include#include #include using namespace std;int aa[21];int fun(int a,int b,int c) { aa[0]=1; for(int i=1;i<=b;i++) //外循环,遍历数组aa[1]=1~b的所有情况 { aa[1]=i; for(int j=2;j<=max(a,c);j++) //由题意打表数组aa(在满足外循环的条件下的aa) { aa[j]=aa[j-1]+aa[j-2]; } if(aa[a]==b) //判断下面写了(个人感觉判断很核心) { return aa[c]; } } return -1;}int main(){ int a,b,c; while(scanf("%d%d%d",&a,&b,&c)!=EOF) { cout< <
令a=i;b=g(i);c=j;
大概思路是:外循环:aa[1]的值从1~b,目的是遍历数组aa的所有情况,那为什么i<=b呢?由题目已知条件:g(1)=t,t>=1,所以g(i)>=i
内循环:j<=max(a,c)是为了保证打表aa数组打完输入要求的值(emmmmm....)
!!判断:若aa[a]=b,即aa[i]=g(i),也就是我输入的a,b 刚好和我遍历的aa数组符合(也就是我们外循环做的事,一种种情况的去试),既然都符合了,那么输出对应的g(j)也没有问题了~
打表类型??