题目要求我们写一个指定语法的程序,要求这个程序能够输出指定fibnacci数列中的某一项,询问至多不超过30项。
这道题目还是蛮新颖的,虽然不算很难,但是因为坑到我了…所以还是写篇简短的博客记录一番。
这道题目可行的程序很多以至于WA了之后不知道怎么改,我的算法是初始化[n, 0, 1]
之后循环判断当前n是否为1,不是的话将[n, y, x]
变成[n - 1, x, x + y]
,然后再次jump到判断语句处。主要分成三个模块:判断是否为1,对n减一,变换[y, x]
成为[x, x + y]
。结合操作随意构造一番即可。
坑点在于,题目费了很大的劲说了约束条件,约束了程序执行的最大次数1e3..如果我们循环的次数超过33次的话,就无法在1000行以内跑完项数最大30的情况,也是这里导致我WA到自闭QAQ…优化算法之后即可成功AC。
以后读题目一定要仔细关注条件,不然总是死在奇奇怪怪的地方…
当时以为自己程序错了还写了个解释器却发现结果符合的很好qaq
cpp
1void fun(int x){
2 for(int i = 0; i < x; i++) printf("c");
3}
4
5const int inf = 50;
6vector<int> vec = {
7 4, 7, 8,
8 8, 7, 8, 12, 5, 3, inf, 6,
9 7, 8, 7, 8, 13, 5, 2, 12, 8, 5, 6,
10 7, 9, 11, 5, 10, 9, 5, 1,
11 8, 11, 6
12};
13
14int main(){
15// Fastin;
16 int size = (int)vec.size();
17 for(int i = 0; i < size; i++){
18 fun(vec[i]);
19 if(i != size - 1) printf("\n");
20 }
21 return 0;
22}