-1

シーケンス 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();
}

これがどのように機能するのか、少し説明していただけますか?機能はわかるのですが、値の取得方法がよくわかりません...

4

2 に答える 2

0

シーケンス内のすべての用語を順番に作成し、それらをインデックス付きのデータ構造 (ベクトルなど) に格納してから、適切な k を検索するだけです (ベクトルはゼロからインデックス付けされることに注意してください。どうやらそうではありません)。

于 2013-06-13T18:19:38.847 に答える