码迷,mamicode.com
首页 > 其他好文 > 详细

又是斐波那契数列

时间:2018-07-19 22:31:56      阅读:195      评论:0      收藏:0      [点我收藏+]

标签:scan   ios   main   ++   ==   循环   nbsp   为什么   现在   

题目描述


在数学中斐波那契数列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)也没有问题了~

打表类型??

又是斐波那契数列

标签:scan   ios   main   ++   ==   循环   nbsp   为什么   现在   

原文地址:https://www.cnblogs.com/liufei-/p/9336986.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!