#include
int main()
{
int t,digit;
long long arr[50];
arr[1]=2;
arr[2]=3;
for(int i=3; i<50; i++)
arr[i]=arr[i-1]+arr[i-2];
scanf("%d",&t); //输入指令
for(int i=1; i<=t; i++)
{
scanf("%d",&digit);
printf("Scenario #%d:\n%lld\n\n",i,arr[digit]);
}
return 0;
}
//首先,头文件是错的。
#include<stdio.h>
然后,截至到第一个for循环结束,代码按照以下规则构造了一个长度50的数组,数组中的数据类型是长整型
arr[i] = ? i=0
arr[i] = 2 i=1
arr[i] = 3 i=2
arr[i] = arr[i-1]+arr[i-2] 2<i<50
然后,接下来就是具体查询某一个位置的数值,首先你输入你要查询几个数据,然后再输入具体哪个位置
scanf("%d",&t); //输入你要查询几个数据,赋值给t。%d表示你输入的必须是整数
for(int i=1; i<=t; i++){ //循环t次
scanf("%d",&digit); //输入你要查询的数据的位置
printf("Scenario #%d:\n%lld\n\n",i,arr[digit]); //输出 Scenario #第几个:数据。\n表示换行
}
你认真看数组,如果要查询arr[0],出现的会是什么?
这个我认为可能与编译器有关。因为arr[0]没有赋初值,所以:可能编译器默认赋值0,可能会出现随机数。
下面是运行结果(假如我要查询4个数据):
如果对你有帮助,请采纳以鼓励。
arr这个数列,是以2 3开始的斐波拉契数列
每一项等于前两项之和
也就是
2 3 5 8 13 21 34 55 ...
这里是算出它的前t项,然后循环输入digit,输出第digit项的值。
int main()
{
int t,digit;
long long arr[50];
arr[1]=2;
arr[2]=3;
{
// 该语句块初始化数组arr[],使数组从索引1开始是一个斐波那契数列数列。2,3,5,8,13 ...
for(int i=3; i<50; i++)
arr[i]=arr[i-1]+arr[i-2];
}
{
// 该语句块获取一个用户输入t
scanf("%d",&t); //输入指令
}
{
// 该语句块通过上面获取到的t值控制循环次数,每次得到一个digit,digit作为索引,打印arr中的斐波拉契数列的值。
// 这里的输入digit没有做范围检查,有可能数组越界。
for(int i=1; i<=t; i++)
{
scanf("%d",&digit);
printf("Scenario #%d:\n%lld\n\n",i,arr[digit]);
}
}
return 0;
}