【杭电oj刷题】母牛的故事

1、母牛的故事 原题展示:

母牛的故事

2、题目讲解:

这个题还是递归和找规律的问题,做这种问题,就需要自己手动写一段排列,找其中的规律,无非就是递归问题。找到规律后就可以使用代码来实现这个功能即可。

这里面有一个坑,那就是题目说的是第四年年初的母牛会生一头小母牛,其实这头母牛才长了整三年,

第n年:n=1n=2n=3n=4n=5n=6n=7n=8n=9
fn头牛?f1=1f2=2f3=3f4=4f5=6f6=9f7=13f8=19f9=28

手动推导如上:

可以看出规律了,以n = 6年为例,f6=9=6+3=f5(6) + f3那一年的三头在 f3到f6 这三年生的母牛(三头母牛各生一个=3只),也可以再验证其他年。

好了,规律已经找到,那就开始 AC 代码吧!

3、AC代码讲解:

3.1、递归代码

简洁明了,但是运行效率很低。

#include<iostream>
using namespace std;

int loop(int x){
    if(x<4)
        return x;
    return loop(x-1)+loop(x-3);
}

int main(){
    int x;
    while(cin>>x, x){
        cout<<loop(x)<<endl;
    }

    return 1;
}

3.2、使用数组

#include<iostream>
#include<string>
using namespace std;


int main(){
    int x;
    int arr[56] = {0, 1, 2, 3};
    for(int i=0;i<=55;++i){
        arr[i] =arr[i-1] + arr[i-3];
    }
    while(cin>>x, x){
        cout<<arr[x]<<endl;

    }

    return 1;
}

总结

多动手找规律,有问题,多多记录。

参考文章:

https://blog.csdn.net/sxhelijian/article/details/42609353

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值