http://acm.hdu.edu.cn/showproblem.php?pid=1597
法一:
分析:由题意知,设n在Si序列,则:i*(i-1)<=n<=i*(i+1)
解二元一次方程:i^2+i-2*n=0,即:i=(-1+sqrt(1+8*n))/2
#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;
int main()
{
__int64 T,t;
double n,ans;
scanf("%I64d",&T);
while(T--)
{
scanf("%lf",&n);
ans=ceil((-1.0+sqrt(1.0+8.0*n))/2.0); //各种BT的精度问题
t=n-ans*(ans-1)/2; //
t%=9;
if(t==0)
printf("9\n");
else
printf("%I64d\n",t);
}
return 0;
}
法二:
#include<iostream>
#include<cstdio>
using namespace std;
int main()
{
int T,n,ans,t;
scanf("%d",&T);
while(T--)
{
scanf("%d",&n);
ans=1;
while(n>ans)
{
n-=ans;
ans++;
}
t=n%9;
if(t==0)
printf("9\n");
else
printf("%d\n",t);
}
return 0;
}