1 条题解
-
0
#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岁母猪:两年前出生的小母猪长大成年 🐖→🐷
退休母猪:六年前出生的母猪要退休 👵→🚫
新出生 = 年轻妈妈生的 + 成年母猪生的
信息
- ID
- 321
- 时间
- 1000ms
- 内存
- 64MiB
- 难度
- (无)
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者