又是斐波那契数列
Posted liufei-
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了又是斐波那契数列相关的知识,希望对你有一定的参考价值。
题目描述 在数学中斐波那契数列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 2 3 5 4 3 4 6 12 17801 19 样例输出 2 8 -1 516847
#include<iostream> #include<stdio.h> #include<cmath> 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<<fun(a,b,c)<<endl; } return 0; }
令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)也没有问题了~
打表类型??
以上是关于又是斐波那契数列的主要内容,如果未能解决你的问题,请参考以下文章