zoj - 3952
ZOJ 3952 Fibonacci Sequence Chicken Edition
题目链接
题意
当我读第一遍题时,心态是崩溃的。。。
好吧,不多废话。
其实就是让你编一个程序来输出另一个程序源码。(禁止套娃)
另一个程序就是题中的Chicken Language。
你编的程序输出的每一行 ‘c’ 的数量就是Chicken Language的一个操作码,有多少行输出便有多少个操作码。
这时你会想这和斐波那契数列有啥关系,其实就是通过操作码来算出斐波那契数列第n个数的值(n≤30且n≥1)。
思路
初始化 f(-1) = 1 , f(0) = 0 ,然后进入循环;
每次循环开始时的状态为 stack[1]存储剩下的循环次数,stack[2]存储 f(n-2) , stack[3]存储 f(n-1);
循环的操作:
操作 | 操作码 |
---|---|
copy stack[2] to stack[4] | 7 9 11 5 |
copy stack[3] to stack[2] | 10 9 5 |
Add 相当于 stack[3] = stack[3]+stack[4] | 1 |
push 1 相当于 stack[4] = 1 | 8 |
copy stack[1] to stack[5] | 7 8 12 5 |
Subtract 相当于 stack[4] = stack[5] - stack[4] | 2 |
copy stack[4] to stack[1] | 11 8 5 |
push 1 相当于 stack[5] = 1 | 8 |
Compare 相当于 stack[4] = (stack[4]==stack[5]) | 3 |
push 40 (一个大于操作码个数的值,用于程序stop) 相当于 stack[5] = 40 | 47 |
Jump (如果stack[4]==0,弹出stack[4]和stack[5];如果stack[4]==1,弹出stack[4]和stack[5],程序stop,此时stack[3]的值就是结果) | 6 |
Jump 程序跳转到循环体开始 | 8 19 6 |
代码
一共用了27个操作码,如果你可以用的更少,请忽略这篇题解
#include<cstdio>
void print(int x){for(int i=0;i<x;i++){printf("c");}printf("\n");
}int main(){print(4);//读入一个数,作为循环次数print(8);//初始化f(-1) = 1print(7);//初始化f(0) = 0print(7);//循环体开始print(9);print(11);print(5);print(10);print(9);print(5);print(1);print(8);print(7);print(8);print(12);print(5);print(2);print(11);print(8);print(5);print(7);print(3);print(47);print(6);print(8);print(11);print(6);//循环体结束return 0;
}
zoj - 3952相关推荐
- ZOJ 3952 Fibonacci Sequence Chicken Edition
Year 2017 is the year of chicken, so in this problem we introduce you an interesting programming lan ...
- ZOJ 3952 Fibonacci Sequence Chicken Edition 新构造语言,思路转换
文章目录 题意 题解 题目链接 题意 给你一种只由字符'c'组成的语言,用这种语言编写一个计算斐波那契数列第n项的程序. 该程序结构体包括一个由1开始编号的栈,可进行7种操作,具体请看题面. 题解 首 ...
- ZOJ 2723 Semi-Prime ||ZOJ 2060 Fibonacci Again 水水水!
两题水题: 1.如果一个数能被分解为两个素数的乘积,则称为Semi-Prime,给你一个数,让你判断是不是Semi-Prime数. 2.定义F(0) = 7, F(1) = 11, F(n) = F( ...
- zoj 1204 Additive equations
ACCEPT acm作业 http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=204 因为老师是在集合那里要我们做这道题.所以我很是天 ...
- 【HDU/POJ/ZOJ】Calling Extraterrestrial Intelligence Again (素数打表模板)
http://poj.org/problem?id=1411 POJ http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=168 ...
- 模拟 ZOJ 3878 Convert QWERTY to Dvorak
题目传送门 1 /* 2 模拟:手敲map一一映射,累! 3 除了忘记读入字符串不能用gets用getline外还是很顺利的AC了:) 4 */ 5 #include <cstdio> 6 ...
- 矩阵连乘积 ZOJ 1276 Optimal Array Multiplication Sequence
题目传送门 1 /* 2 题意:加上适当的括号,改变计算顺序使得总的计算次数最少 3 矩阵连乘积问题,DP解决:状态转移方程: 4 dp[i][j] = min (dp[i][k] + dp[k+1] ...
- ZOJ 3597 Hit the Target! (线段树扫描线 -- 矩形所能覆盖的最多的点数)
ZOJ 3597 题意是说有n把枪,有m个靶子,每把枪只有一发子弹(也就是说一把枪最多只能打一个靶子), 告诉你第 i 把枪可以打到第j个靶, 现在等概率的出现一个连续的P把枪,在知道这P把枪之后,你 ...
- 九度OJ—题目1032:ZOJ
题目描写叙述: 读入一个字符串.字符串中包括ZOJ三个字符,个数不一定相等,按ZOJ的顺序输出.当某个字符用完时,剩下的仍然依照ZOJ的顺序输出. 输入: 题目包括多组用例,每组用例占一行,包括ZOJ ...
最新文章
- 机器学习入门(09)— 偏导数、梯度概念、梯度下降法理论和实现
- Objective-C笔记
- sap 提取字符串中汉字
- emacs python_Emacs之Python编程环境配置 - elpy
- 蛮力法在查找算法中的应用(JAVA)--顺序查找
- jQuery DOM/属性/CSS操作
- redhat 6.5 mysql rpm_CentOS6.5和RedHat6.5下以rpm方式安装mysql-5.6.20
- 定时任务的时间设置-Cron表达式
- c++实现简单的qq连连看秒杀挂
- IPwe区块链智能池利用AI来处理专利分析
- Git重置登录密码问题,Git-remote Incorrect username or password ( access token )
- Oracle (07)游标对象.智能循环(FOR) 遍历游标.NULL值的比较.异常处理.存储过程.如何指定参数的模式.function 函数.包 package.触发器 trigger
- dft中X(K)的k的含义
- linux查看硬盘读取速度慢,Linux检测硬盘读取速度
- Linux进程虚拟内存大 性能,Linux进程分析(一) 虚拟内存和物理内存
- Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift全文翻译
- 风陵渡口初相遇,一见杨过误终身
- 【JavaScript问题】JavaScript 请求后台报错 Invalid character found in the request target
- http协议之https协议, libcurl实现人脸识别, 车牌识别
- c语言——指针初阶(2)