给定序列 s: 1, 1, 2, 1, 2, 3, 1, 2, 3, 4, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, . ..对于自然数k,0< k <=1000,确定s序列中k位置上元素的值。示例:对于 k=2,值为 1,对于 k=8,值为 2
这是代码:
#include<fstream.h>
#include<math.h>
ofstream f("sir.out");
float Equation (int a, int b, int c)
{ int d;
float x1,x2;
d=b*b-4*a*c;
if(d<0) return -32000;
else if(d==0) { x1=-b/(2*a);
if(x1>0) return x1;
else return -32000;
}
else { x1=(-b-sqrt(d))/(2*a);
x2=(-b+sqrt(d))/(2*a);
if(x1>x2) if(x1>0) return x1;
else return -32000;
else if(x2>0) return x2;
else return -32000;
}
}
void main()
{ int k,n;
float x;
cin>>k;
x=Equation(1,1,-2*k);
n=x*(x+1)/2;
if(n==x) f<<n;
else f<<k-n*(n+1)/2;
f.close();
}
能否请您解释一下这是如何工作的?我了解该功能,但我不确定如何获得该值...