HZNUOJ 1019 取火柴

题干
Description

有N根火柴,每次只能取1-4根,请问共有几种取法?
举一个例子,假设有3根火柴,取法有4种,分别为1+1+1,1+2,2+1,3。

Input

第一行包含一个正整数T(0<T<100),表示进行T次测试。接下来有T行,每行只有一个正整数n(1<=n<=66),代表n根火柴。

Output

对于每一个n,输出对应的取法的数量,每次输出占一行。

Samples

input Copy
3
1
2
15
output Copy
1
2
10671
原题链接:http://acm.hznu.edu.cn/OJ/problem.php?id=1019

思想:由于一次只能取走1-4根,所以较容易得到取1到4根火柴时的方法数,设f(x)为当火柴数量为x时的方法数。
x=1时

  • 1
    f(1)=1

x=2时

  • 1 1
  • 2
    f(2)=2

x=3时

  • 1 1 1
  • 1 2
  • 2 1
  • 3
    f(3)=4

x=4时

  • 1 1 1 1
  • 1 1 2
  • 1 2 1
  • 2 1 1
  • 2 2
  • 1 3
  • 3 1
  • 4
    f(4)=8

当有五根火柴时,由于我们无法一次拿走五根火柴,能拿走第五根火柴的情况只有四种

  1. 先取一根火柴,然后直接再取四根
  2. 先取两根火柴,然后直接再取三根
  3. 先取三根火柴,然后直接再取两根
  4. 先取四根火柴,然后直接再取一根

由此可得f(5)=f(1)+f(2)+f(3)+f(4),同理可得规律f(x)=f(x-4)+f(x-3)+f(x-2)+f(x-1),x>=5。推到这里这题就变得非常简单啦,一个循环将数据预处理一下就能得到答案了。

#include<map>
#include<string.h>
#include<string>
#include<iostream>
#include<stdio.h>
#include<set>
#include<algorithm>
#include<math.h>
#include<queue>
using namespace std;
typedef long long ll;
const int maxn = 1e2;
ll a[maxn];
void init(void)
{a[1] = 1;a[2] = 2;a[3] = 4;a[4] = 8;for (int i = 5; i <= 66; ++i)a[i] = a[i - 1] + a[i - 2] + a[i - 3] + a[i - 4];
}
int main()
{init();int t;scanf("%d", &t);while (t--){int n;scanf("%d", &n);printf("%lld\n", a[n]);}return 0;//小卜世界第一可爱
}

注意: 数据较大,记得使用long long int,不然会WA。(狗头保命)

HZNUOJ 1019 取火柴相关推荐

  1. P1247 取火柴游戏

    P1247 取火柴游戏 题意: 有n堆火柴,两个人轮流操作,每次只能在从一堆中取若干火柴,拿走最后一根火柴的为胜者,给你一个状态,问先手是赢是输 题解: 很经典的nim博弈,结论大家应该都知道就是全部 ...

  2. 【游戏中的算法】取火柴游戏算法

    文章目录 一.取火柴游戏算法: 二.C/C++实现代码: 1.模拟两个人随机取火柴: 2.电脑随机取火柴,用户输入取火柴: 一.取火柴游戏算法: 取火柴游戏是一个非常简单有趣的小游戏,只要计算好步骤就 ...

  3. P1247 取火柴游戏 (博弈论)

    原题链接:取火柴游戏 - 洛谷 题目描述 输入 k及 k个整数 n1​,n2​,-,nk​,表示有 k 堆火柴棒,第 ii堆火柴棒的根数为ni​:接着便是你和计算机取火柴棒的对弈游戏.取的规则如下:每 ...

  4. 取火柴小游戏python turtle库

    目录 一.代码展示 二.代码讲解 1.海龟画布初始化和检测用户输入 2.绘制火柴的函数draw_line() 3.主程序 4.奖励环节. 游戏介绍 这是一场电脑和人类的博弈.游戏规则是:一共有21个火 ...

  5. P1247ybtoj【数学基础】5章1题【取火柴游戏】

    取火柴游戏 题目 P1247 解析 显然,这是一个NIM博弈的板子 NIM博弈的定义是:有 n n n堆石子,第 i i i堆有 a i a_i ai​个石子,两个玩家轮流取出任意一堆的任意个石子(不 ...

  6. 人机对战之取火柴游戏

    源码 #include<iostream.h> void main() {int a=21, i;cout<<"--------------------------- ...

  7. 甲乙两人轮流取火柴棒问题

    这种问题网上有很多版本,如下所示: 但是总根数和每次取走的数目可能不相同,甚至以后可能变幻题目,比如直接让你取数,只能取1或者2或者3,不过道理都是一样的,其实这道题我们在小学或者初中的时候就接触过, ...

  8. 【YBTOJ】【Luogu】取火柴游戏

    思路: 经典NIM游戏 c o d e code code #include<iostream> #include<cstdio>using namespace std;int ...

  9. 取木棒21根c语言,关于m根火柴 ,人机最多取n根火柴(21根火柴进阶)

    对于这个题,每个人看法不一样,理解不一样,当然程序也不一样. 此题目中,我设置的机器与人都是随机数 主要原理应该大致一样 此题中,我们的要求,拿到最后一根火柴,则算输. 拿到最后一根火柴则算输,那么我 ...

最新文章

  1. python爬虫下载-用Python爬虫下载整本小说
  2. 安卓隐藏摄像_侧置摄像与隐藏前摄,拒绝单调乏味,这两款国产5G手机独具匠心...
  3. Oracle Spatial 翻译第一漳
  4. Lecture 6 Order Statistics
  5. 芯片支持的且会被用到的H.264特性 预测编码基本原理
  6. 互联网日报 | 苹果首款自研芯片M1亮相;酷派主动终止与小米专利侵权诉讼;橙心优选日订单破700万...
  7. [转】Python--遍历列表时删除元素的正确做法
  8. bzoj 4517: [Sdoi2016]排列计数(错排+组合数逆元)
  9. SLAM_相机与imu的融合基础知识
  10. TCP/IP-链路层
  11. 利用python中的pygame模块开发fc坦克大战(可自定义地图,包括部分素材)
  12. SoundPool控件
  13. ubuntu安装ROS运行rosdep init错误,cannot download default sources list from....
  14. IDEA中格式化代码快捷键
  15. ssm医院挂号就诊预约系统毕业设计源码250853
  16. 【微积分】2.1一元函数微分
  17. javascript 域名合法性检测
  18. 数值微分25 - Poisson 泊松方程(一维、二维):已知一些自定义的二阶导数点,得到一条曲线,即原方程平滑地通过它们)
  19. 使用cubemx建立一个内部flash虚拟一个U盘的工程
  20. 工作日志(部门管理)

热门文章

  1. Common Lisp语言快速入门 - Henry Read - 博客园 好文
  2. 目前已确认 Windows 10 KB5015807 更新中存在的问题
  3. Win11安装KB5013943导致应用程序崩溃错误代码0xc0000135
  4. 分枝限界法求解流水线作业调度问题
  5. Metasploit 渗透测试手册第三版 第三章 服务端漏洞利用(翻译)
  6. 【ML】KNN 原理 + 实践(基于sklearn)
  7. 分治算法--棋盘覆盖
  8. 金蝶EAS服务器安装局部补丁时,提示无法安装
  9. MongoDB副本集部署
  10. 打造建筑行业数字化新标杆: 软通动力联合华为云AI+RPA助力中铁十一局智能化升级