hdu_4342 History repeat itself (简单想法题)

来源:互联网 发布:关口知宏评价中国 编辑:程序博客网 时间:2024/06/05 03:52

http://acm.hdu.edu.cn/showproblem.php?pid=4342


题意:

求出第n个非平方数,并根据公式求出结果。

思路:

简单题。先求出第n个非平方数是多少,再代入公式计算。计算我是用i*(i+1)^2-i^2)再求和算的,纸上画画,很容易得出这个结论。

我的代码:

#include<stdio.h>#include<math.h>__int64 x[100001],i,j,n,t,T;__int64 formula(__int64 m){    __int64 ans=0,i,j,n;    n=(__int64)sqrt(m*1.0);    for(i=1;i<n;i++)        ans+=(x[i+1]-x[i])*i;    ans+=(m-x[i]+1)*i;    return ans;}int main(){    for(i=0;i<100000;i++) x[i]=i*i;    scanf("%I64d",&T);    while(T--)    {        scanf("%I64d",&n);        t=(__int64)sqrt(n*1.0);        n+=t;//看n前面有多少个平方数         if(n>=x[t+1]) n++;//超过了t+1个平方数         printf("%I64d %I64d\n",n,formula(n));    }    return 0;}


原创粉丝点击