##题目的分析
首先他是关于一个数列,第一项为1,第二项为1,从第三项起为前两项的和
1.输入
#测试数据的组数n
#输入n组测试数据(每组数据代表数列的第几项)
2.输出
#对应第n项的数字(这个数字是前两项数字的和)
##题目的步骤
1.要输入n组数字,可以用循环,每一次循环让他输入一个数字a,循环n次
2.算第a位到底是什么数字
###a其实是前两位的相加的结果
int m=1; int n=1; int o=0; for(o=0;o<p-2;o+=1){ b=(m+n) n=m; m=b;},可以这样理解对于a的下一位来说a就自动变成了上一位,他的意义就和当时a的上一位,a的上一位就相当于a+1的上上一位,根据这个逻辑我们可以写一个循环用来算出来我们想要的位数
需要注意的点是当第一次循环的时候我们得出的是第3位的结果,然而o=0,那么就是,如果求第三位的结果,当p-2的时候就是循环一次
所以就是需要2个循环,第一个输出每个数字的作用,在这个大的循环里面就需要用小循环来计算出他的数字并且输出
注意一点的是我们算出的是第三位以上的结果,前两项可以用if语句进行分类讨论
#include<iostream> using namespace std; #include<cstdio> #include<cmath> int main(){ int n; cin >> n; int i = 0; int p ; for (i = 0; i < n; i += 1) { cin >> p; int b=0; int h = 1; int m = 1; int n = 1; int o = 0; for (o = 0; o < p - 2; o += 1) { b = (m + n); n = m; m = b; } if (p == 1) { printf("%d",h); } else if (p == 2) { printf("%d",h); } else { printf("%d", b); } } return 0; }