求用数组和循环解决该问题

现在不知道该如何解决,只知道斐波那契数列如何输出其余的不会,希望有人能将注释写清楚些,谢谢了

img

从图可以看出后位是前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");
    }