HZNUOJ 1019 取火柴
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
当有五根火柴时,由于我们无法一次拿走五根火柴,能拿走第五根火柴的情况只有四种
- 先取一根火柴,然后直接再取四根
- 先取两根火柴,然后直接再取三根
- 先取三根火柴,然后直接再取两根
- 先取四根火柴,然后直接再取一根
由此可得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 取火柴相关推荐
- P1247 取火柴游戏
P1247 取火柴游戏 题意: 有n堆火柴,两个人轮流操作,每次只能在从一堆中取若干火柴,拿走最后一根火柴的为胜者,给你一个状态,问先手是赢是输 题解: 很经典的nim博弈,结论大家应该都知道就是全部 ...
- 【游戏中的算法】取火柴游戏算法
文章目录 一.取火柴游戏算法: 二.C/C++实现代码: 1.模拟两个人随机取火柴: 2.电脑随机取火柴,用户输入取火柴: 一.取火柴游戏算法: 取火柴游戏是一个非常简单有趣的小游戏,只要计算好步骤就 ...
- P1247 取火柴游戏 (博弈论)
原题链接:取火柴游戏 - 洛谷 题目描述 输入 k及 k个整数 n1,n2,-,nk,表示有 k 堆火柴棒,第 ii堆火柴棒的根数为ni:接着便是你和计算机取火柴棒的对弈游戏.取的规则如下:每 ...
- 取火柴小游戏python turtle库
目录 一.代码展示 二.代码讲解 1.海龟画布初始化和检测用户输入 2.绘制火柴的函数draw_line() 3.主程序 4.奖励环节. 游戏介绍 这是一场电脑和人类的博弈.游戏规则是:一共有21个火 ...
- P1247ybtoj【数学基础】5章1题【取火柴游戏】
取火柴游戏 题目 P1247 解析 显然,这是一个NIM博弈的板子 NIM博弈的定义是:有 n n n堆石子,第 i i i堆有 a i a_i ai个石子,两个玩家轮流取出任意一堆的任意个石子(不 ...
- 人机对战之取火柴游戏
源码 #include<iostream.h> void main() {int a=21, i;cout<<"--------------------------- ...
- 甲乙两人轮流取火柴棒问题
这种问题网上有很多版本,如下所示: 但是总根数和每次取走的数目可能不相同,甚至以后可能变幻题目,比如直接让你取数,只能取1或者2或者3,不过道理都是一样的,其实这道题我们在小学或者初中的时候就接触过, ...
- 【YBTOJ】【Luogu】取火柴游戏
思路: 经典NIM游戏 c o d e code code #include<iostream> #include<cstdio>using namespace std;int ...
- 取木棒21根c语言,关于m根火柴 ,人机最多取n根火柴(21根火柴进阶)
对于这个题,每个人看法不一样,理解不一样,当然程序也不一样. 此题目中,我设置的机器与人都是随机数 主要原理应该大致一样 此题中,我们的要求,拿到最后一根火柴,则算输. 拿到最后一根火柴则算输,那么我 ...
最新文章
- python爬虫下载-用Python爬虫下载整本小说
- 安卓隐藏摄像_侧置摄像与隐藏前摄,拒绝单调乏味,这两款国产5G手机独具匠心...
- Oracle Spatial 翻译第一漳
- Lecture 6 Order Statistics
- 芯片支持的且会被用到的H.264特性 预测编码基本原理
- 互联网日报 | 苹果首款自研芯片M1亮相;酷派主动终止与小米专利侵权诉讼;橙心优选日订单破700万...
- [转】Python--遍历列表时删除元素的正确做法
- bzoj 4517: [Sdoi2016]排列计数(错排+组合数逆元)
- SLAM_相机与imu的融合基础知识
- TCP/IP-链路层
- 利用python中的pygame模块开发fc坦克大战(可自定义地图,包括部分素材)
- SoundPool控件
- ubuntu安装ROS运行rosdep init错误,cannot download default sources list from....
- IDEA中格式化代码快捷键
- ssm医院挂号就诊预约系统毕业设计源码250853
- 【微积分】2.1一元函数微分
- javascript 域名合法性检测
- 数值微分25 - Poisson 泊松方程(一维、二维):已知一些自定义的二阶导数点,得到一条曲线,即原方程平滑地通过它们)
- 使用cubemx建立一个内部flash虚拟一个U盘的工程
- 工作日志(部门管理)