有大量的重复计算
所以感觉还是打表好一些
#include<stdio.h>
int main() {
int T,kase=0;
scanf("%d",&T);
int a[320]= {0,3};
int b[320]= {0,3};
for(int i=2; i<320; i++) {
a[i]=i*(a[i-1]/(i-1)+i+1);
}
for(int i=2; i<320; i++) {
b[i]=b[i-1]+a[i];
}
while(T--) {
int n;
scanf("%d",&n);
printf("%d %d %d
",++kase,n,b[n]);
}
return 0;
}
标程只用了一个表
应该是找规律时直接从结果下手的
#include<iostream>
using namespace std;
const int M=310;
int W[M];
int main() {
for(int i=1; i!=M; i++)
W[i]=W[i-1]+i*(i+1)*(i+2)/2;
int m,n;
cin>>n;
for(int i=1; i<=n; i++) {
cin>>m;
cout<<i<<" "<<m<<" "<<W[m]<<endl;
}
}