sicily 1029. Rabbit | 高精度加法+递推(类斐波那契推导)

本文解析了1029.Rabbit问题,通过递推算法计算在特定条件下兔子数量的增长。考虑到实际情况,引入了高精度加法来处理长时间后的兔子数量计算。

题目:1029. Rabbit
这里写图片描述

题意:
• 开始有一对成年兔子
• 每对成年兔子每个月产生一对小兔子
• 每只小兔子经过m个月变成成年兔子
• 问经过d个月后有多少兔子
• 约束: 1 <= m <= 10, 1 <= d <= 100

解法:递推
• 这是一道计数问题,对于这类题目,一般是分
情况讨论。
• 比如说F[n]表示第n个月时兔子的数量
• 那么F[0] = 1
• 对于F[n](n>0),可以分成两部分:
• 第一部分上一个月已经有的兔子F[n-1]
• 第二部分新产生的兔子,那么新产生兔子需要经历d个月的兔子,那么就是F[n-d],所以我们可以得到递推式: F[n] = F[n – 1] + F[n – d]
• 另外注意的是对于Fn,我们为了切合实际情况,需要令F[n] = 1
• 注意到d=1时, F[n] = 2 * F[n – 1],这个时候F[100] = 2 ^ 100,这时我们需要高精度
• 对于递推式,我们只需要实现高精度加法就可以了
代码:

#include <iostream>
#include <vector>
#include <algorithm>
#include <complex>
#include <cstdio>
#include <cstring>
using namespace std;
const int maxn = 102;
class bigInt{
public:
    int num[maxn];//储存数字的数组
    int len;//数字的长度
    bigInt(int initVal = 0)
    {
        memset(num, 0, sizeof(num));
        num[0] = initVal;
        len = 1;
    }
    void printNum()
    {
        for (int i = len - 1; i >= 0; i--)
        {
            cout << num[i];
        }
        cout << endl;
    }
};
bigInt operator+ (const bigInt& a, const bigInt& b)//模拟竖式加法
{
    bigInt res;
    int i, temp;
    int maxLen = max(a.len, b.len);
    for (i = temp = 0; i < maxLen || temp > 0; i++)
    {
        if (i < a.len) temp += a.num[i];
        if (i < b.len) temp += b.num[i];
        res.num[i] = temp % 10;
        temp /= 10;
    }
    res.len = i;//更新长度
    return res;
}

int main()
{
    int m, d;
    while (cin >> m >> d && m && d)
    {
        bigInt F[maxn];
        F[0].num[0] = 1;
        for (int i = 1; i <= d; i++)
        {
            F[i] = F[i - 1]; 
            if (i >= m)
            {
                F[i] = F[i] + F[i - m];
            }
            else
            {
                F[i] = F[i] + F[0];//F[i] = F[i] + 1 
            }
        }
        F[d].printNum();
    }
    //system("pause");
}
### 实现省市区镇四级联动的效果 为了在 Vue 项目中使用 `element-china-area-data` 和 Element Plus 的 `<el-cascader>` 组件来实现省市区镇四级联动功能,可以按照以下方式配置。 #### 数据准备 首先需要引入 `element-china-area-data` 提供的 JSON 数据文件。该数据包含了中国地区的省市县乡四级区域划分信息[^1]。可以通过 npm 或 yarn 安装此依赖包: ```bash npm install element-china-area-data --save ``` 安装完成后,在代码中导入并解析这些数据作为级联选择器的数据源。 #### 配置组件 以下是完整的示例代码,展示如何设置 `<el-cascader>` 来支持四级联动效果: ```vue <template> <div> <el-cascader v-model="selectedArea" :options="areaData" placeholder="请选择地区" clearable @change="handleCascaderChange" /> </div> </template> <script> import { ref, onMounted } from 'vue'; // 导入 area data import areaData from 'element-china-area-data'; export default { setup() { const selectedArea = ref([]); // 初始化区域数据 const areaData = ref(areaData); // 处理级联选择变化事件 const handleCascaderChange = (value) => { console.log('当前选中的值:', value); }; onMounted(() => { console.log('已加载区域数据', areaData.value); }); return { selectedArea, areaData, handleCascaderChange, }; }, }; </script> <style scoped> /* 自定义样式 */ .el-cascader { width: 100%; } </style> ``` 上述代码实现了以下几个要点: 1. **绑定选项数据**:通过 `:options="areaData"` 将预处理好的区域数据传递给 `<el-cascader>`。 2. **双向绑定模型值**:利用 `v-model="selectedArea"` 动态跟踪用户的输入状态。 3. **监听变更事件**:当用户完成选择时触发回调函数 `@change="handleCascaderChange"` 并打印所选结果[^2]。 #### 进一步优化 如果希望进一步提升性能或者减少初始渲染时间,则可考虑启用懒加载模式(Lazy Load)。这允许仅在必要时才从服务器获取子节点的信息而不是一次性加载全部数据。具体做法如下所示: 修改后的模板部分增加属性 `props="{ lazy: true, lazyLoad }"` 及其对应的逻辑方法即可满足需求。 --- ### 总结 以上方案展示了基于 `element-plus` 和 `element-china-area-data` 构建省市区镇四级联动的选择器的具体流程以及注意事项。它不仅简单易懂而且具备良好的扩展性和灵活性能够适应多种实际应用场景的需求。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值