Complete the Sequence!

Complete the Sequence!

给定一个数列 P(n),这个数列的通项公式可表示为: P(n)=a_{i}i \cdot⋅ n^{i}n**i+a_{i-1}i−1 \cdot⋅ n^{i−1}n**i−1+ ... +a_{1}1 \cdot⋅ n+a_{0}0。 现在给出这个数列的前S个数, 求这个数列接下来的后C项。 注意:输出可能的数中最小的。 输入:第一行数据组数t,之后每组数据分别有S,C和数列的前S项。 输出:对于每一组数据,输出接下来的C项。 t<=5000,S<=100,C<=100,S+C<=100。

输入:

4
6 3
1 2 3 4 5 6
8 2
1 2 4 7 11 16 22 29
10 2
1 1 1 1 1 1 1 1 1 2
1 10
3

输出:

7 8 9
37 46
11 56
3 3 3 3 3 3 3 3 3 3

方法:牛顿插值法

每次 求两项之间的差,形成一个新序列,不断向下求,知道序列公差为0的时候,再倒推回去,就可以的到完整序列

#include<iostream>
#include<iomanip>


using namespace std;

int nums[100][100];

int main(){
    int i,j;

    int time;
    scanf("%d",&time);
    while(time--){
        int s,c;
        for(i=0;i<100;i++){
            for(j=0;j<100;j++){
                nums[i][j]=0;
            }
        }
        scanf("%d%d",&s,&c);
        for(i=0;i<s;i++){
            scanf("%d",&nums[0][i]);
        }
        for(i=1;i<s;i++){
            for(j=0;j<s+c;j++){
                nums[i][j] = nums[i-1][j+1]-nums[i-1][j];
            }
        }

        for(i=s-1;i>=0;i--){
            for(j=1;j<s+c;j++){
                nums[i][j]=nums[i][j-1]+nums[i+1][j-1];
            }
        }

        for(i=s;i<s+c;i++){
            printf("%d ",nums[0][i]);
        }

        cout<<endl;

    }

    system("pause");
}
posted @   博客是个啥?  阅读(65)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
点击右上角即可分享
微信分享提示