题目链接
题意
给你一种只由字符’c’组成的语言,用这种语言编写一个计算斐波那契数列第n项的程序.
该程序结构体包括一个由1开始编号的栈,可进行7种操作,具体请看题面.
题解
首先还是研究如何产生斐波那契数列.
可以想到的办法是将斐波那契数列的前30项放在栈的前30项,输入n之后直接将第n项复制到第31项即可.
那么事不宜迟,马上来写.很明显第2,3,6三种操作是不需要使用的.
具体直接看代码.
void print(int n) { //输出n个c
char op[999]={0};
for (int t=1;n--;op[t++]='c');
puts(op+1);
}
void push(int x) { // 第七种操作,输入x
print(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); //先在栈里输入两个1
for (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项,也即我们需要的答案.
}
谢谢大家.