昨天做过一样的题:
平方和公式:n*(n+1)*(2n+1)/6
#include<cstdio> #include<cstdlib> #include<iostream> using namespace std; int a[150],num; int b[150]; int _S() { char c=getchar();int s=0; while(c<'0'||c>'9') c=getchar(); while(c>='0'&&c<='9'){s=s*10+c-'0';c=getchar();} return s; } void _db() { for(int i=1;i<=141;i++) a[i]=(i+1)*i/2; for(int i=1;i<=141;i++) b[i]=i*(i+1)*(2*i+1)/6; return ; } void _get(int v) { int tmp,ans; for(int i=1;i<=141;i++) if(a[i]<=v) tmp=i;//当然也可以用二分查找或者lower_bound ans=b[tmp]; ans+=(v-a[tmp])*(tmp+1); printf("%d %d ",v,ans); return ; } int main() { _db(); int T,n,x; T=_S(); while(T--){ while(true){ x=_S(); if(x==0) break; _get(x); } if(T) printf(" "); } return 0; }