一看到它就懵了,后来看了题解,原来这道题目跟我们以前学过的数学斜率知识很像,一阶的斜率为一个数,二阶的斜率为一个一阶数组.....所以用差分就可以解决这个问题
说说我所犯下的错误吧——一个无形的空格号
for(i=n+1;i<=n+m;i++)cout<<f[0][i]<<' ';cout<<endl;结果呢,在每种情况的输出后面多了一个空格
for(i=n+1;i<n+m;i++)cout<<f[0][i]<<' ';cout<<f[0][i]<<endl;结果呢,每种情况得到了正确的输出
#include "iostream" using namespace std; int main(){ int Case,n,m,i,num[210],f[210][210],j; cin>>Case; while(Case--){ cin>>n>>m; for(i=1;i<=n;i++){cin>>num[i];f[0][i]=num[i];} for(i=1;i<n;i++){ for(j=1;j<=n-i;j++){ f[i][j]=f[i-1][j+1]-f[i-1][j]; } } for(i=2;i<=1+m;i++){f[n-1][i]=f[n-1][1];} for(i=n-2;i>=0;i--){ for(j=n-i;j<=n+m;j++){ f[i][j]=f[i+1][j-1]+f[i][j-1]; } } //cout<<"number ";for(i=1;i<=n+m;i++)cout<<f[0][i]<<' ';cout<<endl; for(i=n+1;i<n+m;i++)cout<<f[0][i]<<' '; cout<<f[0][i]<<endl; } }