C1-D-HolmiumTS的羊羊牧场

这篇博客介绍了如何利用斐波那契数列解决Minecraft游戏中建立羊羊牧场的问题。HolmiumTS初始有m只小羊,每天成年羊会增加一倍,求第n天的羊总数量。通过循环或递归方法实现计算,避免TLE错误,确保在给定的数据范围内得到正确答案。
摘要由CSDN通过智能技术生成

题目

时间限制:1000ms
题目描述
HolmiumTS在Minecraft中非常缺少羊毛(问就是GTNH),所以他准备建立一个很大很大的羊羊牧场来提供足够的羊毛。

在Minecraft中,一只在第i天出生的小羊在第i+1天就可以长大,成为成年羊。

每一对成年羊每天可以产下一只小羊,但单独的一只成年羊是不可以产小羊的。

HolmiumTS在第0天带来了m只小羊,那么第n天结束之后,HolmiumTS一共会有多少只羊(包括小羊和成年羊)呢?

输入
第一行包含一个正整数,为数据组数t
接下来t行,每行2个整数,分别为n,m
输出
对于每组数据,输出一行,包含一个整数,为所求的结果

输入样例

1
3 5

输出样例

15

数据范围与约定

1<=t<=100
0<=n,m<=1e8
保证结果小于1e6

样例解释
第0天结束,有5只小羊,0只成年羊

第1天结束,有2只小羊,5只成年羊

第2天结束,有3只小羊,7只成年羊

第3天结束,有5只小羊,10只成年羊

提示
如果TLE了,注意输入可以有0,想一想数据实际可能的范围,如何判断最坏情况。

思路分析

这是一个比较简单的斐波那契问题,因为没有小羊死亡的情况,而且小羊出生的第二天就能生育,所以说比较简单
我们可以直接用循环或递归模拟小羊的数量变化过程

AC代码

//循环方法
#include <stdio.h>
long long gro, new;
int main()
{
    int n, m, t;
    scanf("%d", &t);

    for (int i = 0; i < t; i++)
    {
        scanf("%d %d", &n, &m);
	if (m == 0 || m == 1)
        {
            printf("%d\n", m);
            continue;
        }
        gro = 0;
        new = m;
        for (int i = 1; i <= n; i++)
        {
            gro += new;
            new = gro / 2;
        }
        printf("%lld\n", gro + new);
    }
    return 0;
}

cz大佬的递归版本

#include<stdio.h>
int solve(int num, int day)
{
	return day <= 0 ? num : solve(num / 2 + num, --day);
}
int main()
{
	int t, n, m;
	scanf("%d", &t);
	while (t--)
	{
		scanf("%d%d", &n, &m);
		printf("%d\n", m <= 1 ? m : solve(m, n));
	}
	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值