首页 > 其他分享 >第二十四天

第二十四天

时间:2023-05-16 20:36:14浏览次数:35  
标签:BigNum nums int back num 第二十四 push

问题描述:

链接:https://ac.nowcoder.com/acm/challenge/terminal?&headNav=acm
来源:牛客网

题目描述

    现在有一个大小n*1的收纳盒,我们手里有无数个大小为1*1和2*1的小方块,我们需要用这些方块填满收纳盒,请问我们有多少种不同的方法填满这个收纳盒

输入描述:

第一行是样例数T
第2到2+T-1行每行有一个整数n(n<=80),描述每个样例中的n。

输出描述:

对于每个样例输出对应的方法数
示例1

输入

复制
3
1
2
4

输出

复制
1
2
5

说明

n=4,有五种方法
1:1 1 1 1
2:2 1 1
3:1 2 1
4:1 1 2
5:2 2
代码:
#include <iostream>
#include <string>
#include <vector>
using namespace std;

/**
 * 定义高精度数字类 BigNum
 */
class BigNum {
private:
    vector<int> nums;

public:
    // 构造函数
    BigNum() {}
    BigNum(int num)
    {
        if (num == 0)
            nums.push_back(0);
        while (num > 0) {
            nums.push_back(num % 10);
            num /= 10;
        }
    }
    BigNum(string str)
    {
        if (str.empty())
            nums.push_back(0);
        for (int i = str.length() - 1; i >= 0; i--) {
            nums.push_back(str[i] - '0');
        }
    }

    // 复制构造函数
    BigNum(const BigNum& num)
    {
        nums = num.nums;
    }

    // 重载 "+" 运算符
    BigNum operator+(const BigNum& num2)
    {
        BigNum res;
        int len1 = nums.size(), len2 = num2.nums.size(), carry = 0;
        for (int i = 0; i < len1 || i < len2; i++) {
            int sum = carry;
            if (i < len1)
                sum += nums[i];
            if (i < len2)
                sum += num2.nums[i];
            res.nums.push_back(sum % 10);
            carry = sum / 10;
        }
        if (carry > 0)
            res.nums.push_back(carry);
        return res;
    }

    // 重载 "<<" 运算符
    friend ostream& operator<<(ostream& out, const BigNum& num);

    // 获取数字的位数
    int size() const
    {
        return nums.size();
    }
};

ostream& operator<<(ostream& out, const BigNum& num)
{
    int len = num.nums.size();
    for (int i = len - 1; i >= 0; i--) {
        out << num.nums[i];
    }
    return out;
}

const int MAXN = 85;
BigNum f[MAXN];

int main()
{
    // 初始化
    f[1] = BigNum(1);
    f[2] = BigNum(2);
    // DP
    for (int i = 3; i <= 80; i++) {
        f[i] = f[i - 1] + f[i - 2];
    }
    int t;
    cin >> t;
    while (t--) {
        int n;
        cin >> n;
        cout << f[n] << endl;
    }
    return 0;
}

标签:BigNum,nums,int,back,num,第二十四,push
From: https://www.cnblogs.com/czfznb/p/17406712.html

相关文章

  • c++打卡第二十四天
    一、亲密数1、问题描述 2、设计思路①、我们可以设计函数计算一个数的因子,将这些因子相加到一起,返回和并对这个返回值重新调用求因子函数,如果这个函数返回值为A,那么这两个数为亲密数,打印出AB。②、求因子可以对A进行2~A的遍历,同时c除余d,如果余数为0,那么d就是c的因子。3、流......
  • 第二十四章:事件入门
     学习要点:1.事件介绍2.内联模型3.脚本模型4.事件处理函数JavaScript事件是由访问Web页面的用户引起的一系列操作,例如:用户点击。当用户执行某些操作的时候,再去执行一系列代码。一.事件介绍事件一般是用于浏览器和用户操作进行交互。最早是IE和NetscapeNavigator中出现,作为分......
  • 第二十四篇 最佳实践 - 性能
    bycaixin深圳前端性能优化最佳实践客户端性能、服务器端、网络性能1、页面内容减少HTTP请求数减少DNS查询避免重定向缓存Ajax请求延迟加载预先加载减少DOM元素数量划分内容到不同域名尽量减少iframe使用避免404错误2、服务器使用CDN添加Expi......
  • 第二十四篇 vue - 深入组件 - 内置组件 - TransitionGroup
    TransitionGroup<TransitionGroup>是一个内置组件,用于对v-for列表中的元素或组件的插入、移除和顺序改变添加动画效果和的区别<TransitionGroup>支持和<Transition>基本相同的props、CSS过渡class和JavaScript钩子监听器,但有以下几点区别:默认情况下,它不会渲染......
  • 第二十四课:获取下拉列表的value值
    <!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>Document</title></head><body><selectonchange="alert(this.value)......
  • 代码随想录算法训练营第二十四天|LeetCode 77. 组合
    77.组合文章:代码随想录(programmercarl.com)视频:带你学透回溯算法-组合问题(对应力扣题目:77.组合)|回溯法精讲!_哔哩哔哩_bilibili思路:那么我把组合问题抽象为如下树形......
  • 代码随想录算法训练营第二十四天 | 第七章 回溯算法-理论基础,77. 组合
    一、参考资料理论基础题目链接/文章讲解:https://programmercarl.com/%E5%9B%9E%E6%BA%AF%E7%AE%97%E6%B3%95%E7%90%86%E8%AE%BA%E5%9F%BA%E7%A1%80.html视频讲解:htt......
  • linux回炉第二十四天
    mysqldump--helpmysqldump-uroothellodb|gzip>/data/backup_mysql.sql.gzmysqldump-uroot-Bhellodb>/data/mysql_backup1.sqlmysqldump-uroot-A>/data/mysq......
  • 代码随想录算法训练营第二十四天 | ● 理论基础 ● 77. 组合
    今日内容:●理论基础●77.组合详细布置理论基础其实在讲解二叉树的时候,就给大家介绍过回溯,这次正式开启回溯算法,大家可以先看视频,对回溯算法有一个整体的了......
  • 第二十四章《学生信息管理系统》第1节:学生信息管理系统简介
     学生信息管理系统用于管理学生基本信息,该系统除能够大大的帮助学籍管理人员提高工作效率。本小节将从软件功能、数据库系统设计和项目结构几个方面介绍该软件系统的设计方......