シーケンス 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();
}
これがどのように機能するのか、少し説明していただけますか?機能はわかるのですが、値の取得方法がよくわかりません...