文章目录
- 题意
- 题解
题目链接
题意
给你一种只由字符’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项,也即我们需要的答案.
}
谢谢大家.