当前位置: 代码迷 >> 综合 >> ZOJ 3952 Fibonacci Sequence Chicken Edition 新构造语言,思路转换
  详细解决方案

ZOJ 3952 Fibonacci Sequence Chicken Edition 新构造语言,思路转换

热度:33   发布时间:2024-02-24 01:30:09.0

文章目录

  • 题意
  • 题解

题目链接

题意

给你一种只由字符’c’组成的语言,用这种语言编写一个计算斐波那契数列第n项的程序.
该程序结构体包括一个由1开始编号的栈,可进行7种操作,具体请看题面.

题解

首先还是研究如何产生斐波那契数列.
可以想到的办法是将斐波那契数列的前30项放在栈的前30项,输入n之后直接将第n项复制到第31项即可.
那么事不宜迟,马上来写.很明显第2,3,6三种操作是不需要使用的.
具体直接看代码.

void print(int n) {
     //输出n个cchar op[999]={
    0};for (int t=1;n--;op[t++]='c');puts(op+1);
}
void push(int x) {
     // 第七种操作,输入xprint(x+7);
}
void add() {
    print(1);
}
void load() {
    print(4);
}
void copy(int x,int y) {
    push(x),push(y);print(5);
}
int main() {
    push(1),push(1); //先在栈里输入两个1for (int i=3;i<=30;++i) {
    push(1),push(1); // 随便输入两个数占位置copy(i-2,i),copy(i-1,i+1); //将倒数第二项和倒数第一项复制过来add(); // 执行加法操作,相加的两个数会被丢掉,放进来的那个数就是f(n+2).}push(1); // 随便输入一个数占第31个位置load();push(31);print(5); // 将第n项复制到第31项,可以看到这时的栈顶元素就是第31项,也即我们需要的答案.
}

谢谢大家.

  相关解决方案