1 条题解

  • 0
    @ 2025-8-6 14:33:02
    #include<iostream>
    #include<cstdio>
    using namespace std;
    long long s, a[50];  // s:能生小猪的母猪数量,a[i]:第i年新出生的母猪数量
    
    int main() {
    	int n, i;
    	cin >> n;  // 输入年份n
    	
    	// 第一年只有1头母猪
    	if(n == 1) 
    		cout << 1 << endl; 
    	else {
    		n += 5;  // 将年份增加5,方便计算(这样第6年对应原始第1年)
    		
    		s = 0;   // 初始化:当前能生育的母猪数量(3-5岁)
    		a[6] = 1;  // 第6年有1头新出生的母猪(对应原始第1年的母猪)
    		
    		// 从第7年开始计算到第n年
    		for(i = 7; i <= n; i++) {
    			// 更新能生育的母猪数量:
    			//   +a[i-2]:两年前出生的小母猪,现在刚好3岁,可以生育了
    			//   -a[i-6]:六年前出生的母猪,现在6岁要退休(死亡)
    			s = s + a[i-2] - a[i-6];
    			
    			// 计算今年新出生的小母猪:
    			//   a[i-1]*2:去年出生的母猪每头生2只小母猪(年轻妈妈)
    			//   s*4:能生育的母猪每头生4只小猪(其中2只小母猪)
    			a[i] = a[i-1]*2 + s*4;
    		}
    		
    		// 输出中间值帮助理解(可选):
    		//   s:能生育的母猪数量
    		//   a[n-1]:去年出生的母猪
    		//   a[n]:今年出生的母猪
    		cout << s << " " << a[n-1] << " " << a[n] << endl; 
    		
    		// 计算第n年猪的总数:
    		//   s:能生育的母猪(3-5岁)
    		//   a[n-1]:去年出生的母猪(1岁)
    		//   2*a[n]:今年出生的母猪+公猪(今年每头母猪生2公2母)
    		cout << s + a[n-1] + 2*a[n] << endl;
    	}
    	return 0;
    }
    

    通俗易懂的解释: 小猪成长规则:

    母猪3岁开始生宝宝(3-5岁能生)

    母猪6岁退休(死亡)

    每只生育母猪每年生4只小猪(2公🐖+2母🐖)

    公猪不会死亡,但也不生宝宝

    程序计算思路:

    把第1年当作第6年开始计算(方便处理退休)

    用a[i]记录每年新出生的母猪数量

    用s记录能生育的母猪数量(3-5岁)

    每年更新:

    新3岁母猪:两年前出生的小母猪长大成年 🐖→🐷

    退休母猪:六年前出生的母猪要退休 👵→🚫

    新出生 = 年轻妈妈生的 + 成年母猪生的

    • 1

    信息

    ID
    321
    时间
    1000ms
    内存
    64MiB
    难度
    (无)
    标签
    递交数
    0
    已通过
    0
    上传者