现在不知道该如何解决,只知道斐波那契数列如何输出其余的不会,希望有人能将注释写清楚些,谢谢了
从图可以看出后位是前1位或前2位的和,以及二分法查找,以及数组左右移位,共4种算法。
//斐波那契数列
{
//定义并初始化变量
int a[20] = { 0 };//原始数组
int b[20] = { 0 };//临时数组
a[0] = 1;//数组第一个元素
a[1] = 1;//数组第二个元素
//写入斐波那契数列
for (int i = 0; i < 20; i++)
{
if (i > 1)
{
a[i] = a[i - 1] + a[i - 2];
}
printf("%d ", a[i]);
}
printf("\n");
//找到第一个大于500的元素,并删除该元素,同时生成最后一位元素
for (int i = 0; i < 20; i++)
{
if (a[i] > 500)
{
//元素顺次前进一位
a[i] = a[i + 1];
a[i + 1] = a[i + 2];
}
if(i==19)
{
//生成最后一位元素
a[19] = a[17] + a[18];
}
printf("%d ", a[i]);
}
printf("\n");
//数组备份
for (int i = 0; i < 20; i++)
{
b[i] = a[i];
}
//将500插入数组,生成新的数组
for (int i = 0; i < 20; i++)
{
//找到可以插入500的位置
if ((a[i] < 500) &&(a[i+1] > 500))
{
//输出小于500的元素
printf("%d ", a[i]);
//进一位,赋值500
i++;
a[i] = 500;
printf("%d ", a[i]);
}
else if (a[i] < 500)
{
printf("%d ", a[i]);
}
else
{
//大于500 的元素启动备用数组进行赋值
a[i] = b[i - 1];
printf("%d ", a[i]);
}
}
printf("\n");
}